什么是Quaternion四元数

1843年,William Rowan Hamilton发明了四元数,但直到1985年才有一个叫Ken Shoemake的人将四元数引入计算机图形学处理领域。四元数在3D图形学中主要用于旋转,骨骼动画等。

简单地来说,四元数描述了一次旋转:绕任意一个轴(V)旋转一个弧度(θ)。

那么四元数q就与(V,θ)两个参数有关。

具体公式:

q = (sin(θ / 2) * V,cos(θ / 2) )

q = (sin(θ / 2) * x,sin(θ / 2) * y,sin(θ / 2) * z,cos(θ / 2))

在Unity中使用Quaternion对象

创建Quaternion对象

//
float radians = 90 / 360f * Mathf.PI * 2;
//
Vector3 n = Vector3.up; //
float w = Mathf.Cos (radians / 2);
//
float s = Mathf.Sin (radians / 2); //
float x = n.x * s;
float y = n.y * s;
float z = n.z * s; //
transform.rotation = new Quaternion (x, y, z, w);

上述代码,可以设置一个游戏对象沿着Y轴向上的方向顺时针旋转90度

Quaternion对象的方法

实例方法

Set用法

//
float radians = degress / 360f * Mathf.PI * 2;
//
Vector3 n = Vector3.up; //
float w = Mathf.Cos (radians / 2);
//
float s = Mathf.Sin (radians / 2); //
float x = n.x * s;
float y = n.y * s;
float z = n.z * s; //
Quaternion q = new Quaternion ();
q.Set (x, y, z, w); //
transform.rotation = q;

SetFromRatation用法

//
Quaternion q = new Quaternion ();
q.SetFromToRotation (Vector3.up, Vector3.left); //
transform.rotation = q;

SetLookRotation用法

//
Quaternion q = new Quaternion ();
q.SetLookRotation (Vector3.back); //
transform.rotation = q;

静态方法

//
transform.rotation = Quaternion.identity; //
transform.rotation = Quaternion.AngleAxis (degress, Vector3.up); //
transform.rotation = Quaternion.Dot (q1, q2); //
transform.rotation = Quaternion.Inverse (q1); //
transform.rotation = Quaternion.Lerp(q1,q2,Time.deltaTime); //
transform.rotation = Quaternion.Slerp (q1, q2, Time.deltaTime);

[Unity Quaternion]四元数Quaternion的计算方式的更多相关文章

  1. 【转】【Unity】四元数(Quaternion)和旋转

    http://blog.csdn.net/candycat1992/article/details/41254799

  2. 学习和研究下unity3d的四元数 Quaternion

    学习和研究下unity3d的四元数 Quaternion 今天准备学习和研究下unity3d的四元数 Quaternion 四元数在电脑图形学中用于表示物体的旋转,在unity中由x,y,z,w 表示 ...

  3. unity3d的四元数 Quaternion

    原地址:http://www.cnblogs.com/88999660/archive/2013/04/02/2995074.html 今天准备学习和研究下unity3d的四元数 Quaternion ...

  4. Quaternion 四元数

    Quaternions are used to represent rotations. 四元数用于表示旋转. They are compact, don't suffer from gimbal l ...

  5. 四元数Quaternion的基本运算

    技术背景 在前面一篇文章中我们介绍了欧拉角死锁问题的一些产生背景,还有基于四元数的求解方案.四元数这个概念虽然重要,但是很少会在通识教育课程中涉及到,更多的是一些图形学或者是工程学当中才会进行讲解.本 ...

  6. Unity3D_(API)Quaternion四元数中的Quaternion.LookRotation()

    四元数百度百科: 传送门 四元数官方文档: 传送门 欧拉旋转.四元数.矩阵旋转之间的差异: 传送门 四元数转换为欧拉角eulerAngles 官方文档: 传送门 欧拉角转换为四元数Euler 官方文档 ...

  7. System.currentTimeMillis()计算方式与时间的单位转换

    目录[-] 一.时间的单位转换 二.System.currentTimeMillis()计算方式 一.时间的单位转换 1秒=1000毫秒(ms) 1毫秒=1/1,000秒(s)1秒=1,000,000 ...

  8. NTC(负温度)热敏电阻.阻值的计算方式

    来源 :http://blog.csdn.net/blue0432/article/details/8690190 现在低成本测温方案中NTC热敏电阻用的比较多,一般采用查表的方法获取温度值,这就牵涉 ...

  9. mysql中TPS, QPS 的计算方式

    今天突然有个同事问题一个问题, mysqlTPS和QPS的计算公式是什么? 以前确实也没有关注过这个计算公式,所以查了下学习了下: 下面是参考内容.  在做db基准测试的时候,qps,tps 是衡量数 ...

随机推荐

  1. cocos2d-lua SDK接入

    1.lua 调用Java函数 1.1 在java中创建一个静态函数(比如在org.cocos2dx.lua.AppActivity.java中)名为Login public static void m ...

  2. Hibernate 系列教程10-组成关系

    组成关系 在一个员工模型里面需要存入 员工公司所在地址的城市,街道 员工籍贯所在的城市,街道, 此时可以抽取城市,街道变成一个模型即是组成关系 Employee public class Employ ...

  3. Hibernate 系列教程3-单表操作

    工程截图 hibernate.cfg.xml <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Conf ...

  4. eclipse的调试方法的简单介绍

    声明:本文不是自己 作为编程人员,程序的调试是一项基本功.在不使用IDE的时候,程序的调试多数是通过日志或者输入语句(System.out.println)的方式.可以把程序运行的轨迹或者程序运行过程 ...

  5. js入门实例

    <!DOCTYPE html> <html> <body> <h1>My First Web Page</h1> <p>My F ...

  6. 默认系统为UEFI启动的GPT分区的WIN7(8),如何安装VHD的UEFI WIN8(7)

    默认系统为UEFI启动的GPT分区的WIN7(8),如何安装VHD的UEFI WIN8(7) 情况A:如果默认系统为UEFI启动.GPT分区的WIN7,想安装个VHD的UEFI WIN8.1 1:系统 ...

  7. php 创建删除数据库

    <?php $dbhost = 'localhost:3306'; $dbuser = 'root'; $dbpass = ''; $conn = mysql_connect($dbhost, ...

  8. hosts文件不显示

    1.按住windows键(就是小旗子小窗口键)+R,打开运行:2.在输入框中输入 cmd并回车:3.紧接着在dos窗口中输入"CD \WINDOWS\SYSTEM32\DRIVERS\ETC ...

  9. EnglishWords----1

    upon在...上面 upright垂直的,直立的 upward向上的 outward外面的,向外的 downward向下的 vertical垂直的 parallel平行的 sow播种 cut切 ch ...

  10. Android应用程序基础

    Android程序使用Java语言编写.Android开发套件把数据.资源文件和Java代码编译到一个.以.apk为后缀名的Android压缩包中.一个单独的apk文件中的所有代码被认为是一个andr ...