[Unity Quaternion]四元数Quaternion的计算方式

什么是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);
时间: 2024-10-24 12:06:51

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

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

四元数百度百科: 传送门 四元数官方文档: 传送门 欧拉旋转.四元数.矩阵旋转之间的差异: 传送门 四元数转换为欧拉角eulerAngles 官方文档: 传送门 欧拉角转换为四元数Euler 官方文档: 传送门 Quaternion.LookRotation 官方文档:传送门 LookRotation()根据对局部坐标轴的描述, 构造对应的代表旋转程度的四元数 一.Transform中四元数和欧拉角 using System.Collections; using System.Collectio

unity 使用四元数旋转向量

1.向量转换为四元数 Quaternion qua0=new Quaternion(); Debug.Log(qua0.eulerAngles);//输出:(0.0, 0.0, 0.0) Quaternion qua1=Quaternion.LookRotation(Vector3.forward); Debug.Log(qua1.eulerAngles);//输出:(0.0, 0.0, 0.0) Quaternion qua2=Quaternion.LookRotation(new Vecto

国内cn域名过期失效日期计算方式

国内的cn域名在过期60天后将会被***, 可以提供重新注册. 但是这60天是怎么计算的呢? 如果你计算错了也许期盼已久的域名就会被别人注册走. 我就有这么悲催经历, 先前是看到有的网站说是过期45天就***了,让我守了2个晚上也没有注册到. 结果在60天到期***的时候被别人注册走了. 请记住 60天的过期时间是 包括域名过期当天计算一天. 第60天计算一天. 也就是在第60天的时候 就可以注册了. 不用等到第61天.................... 国内cn域名过期失效日期计算方式,布

C++ 类占用空间计算方式

1.一个类占用的空间主要是属性占用空间,而成员函数一般不占用空间,但是虚函数占用空间,需要说明的是,无论多少个虚函数,只要占用4个字节即可,也就是索引指向一个虚拟表的首位置.另外需要说明的是占用空间都考虑了对齐,所以不足4个的按照满4个的算. 2.类的继承,子类占用空间是父类基础上增加本类空间即可.所以说可以认为,子类就是直接拷贝了父类的内容,然后结合自身的内容.而且存储空间也是这个顺序,即先父类分配空间,然后才是子类空间. 3.静态成员变量不占用类空间,应该是确实没有放入这个类的里面,而且没有

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

目录[-] 一.时间的单位转换 二.System.currentTimeMillis()计算方式 一.时间的单位转换 1秒=1000毫秒(ms) 1毫秒=1/1,000秒(s)1秒=1,000,000 微秒(μs) 1微秒=1/1,000,000秒(s)1秒=1,000,000,000 纳秒(ns) 1纳秒=1/1,000,000,000秒(s)1秒=1,000,000,000,000 皮秒(ps) 1皮秒=1/1,000,000,000,000秒(s) 1分钟=60秒 1小时=60分钟=360

dx11 入门 Tutorial 04: DX、HLSL中矩阵的内存存储和数学计算方式 DirectXSampleBrowser(June 2010)

主要是两方面: 1.shader数据和dx的通信,使用constant Buffer 2.矩阵的数学计算方式和内存存储方式再DX和HLSL中的异同 先说第一个: dx中的常量数据matrix等传入shader中流程: The first thing that we need to do is declare three constant buffer variables. Constant buffers are used to store data that the application n

显示游戏FPS帧率的几种计算方式

FPSDisplay.cs using UnityEngine; using System.Collections; public class FPSDisplay : MonoBehaviour { float deltaTime = 0.0f; void Update() { deltaTime += (Time.deltaTime - deltaTime) * 0.1f; } void OnGUI() { int w = Screen.width, h = Screen.height; G

深度学习的黄金搭档:GPU正重塑计算方式(转载)

转载:原文链接 深度学习的黄金搭档:GPU正重塑计算方式 OFweek电子工程网讯 随着神经网络和深度学习研究的不断深入——尤其是语音识别和自然语言处理.图像与模式识别.文本和数据分析,以及其他复杂领域——研究者们不断在寻找新的更好的方法来延伸和扩展计算能力. 几十年来,这一领域的黄金标准一直是高性能计算(HCP)集群,它解决了大量处理能力的问题,虽然成本有点过高.但这种方法已经帮助推动了多个领域的进步,包括天气预测.金融服务,以及能源勘探. 然而,2012 年,一种新的方法出现了.伊利诺伊大学

IE7标准模式select高度计算方式

IE7标准模式下select的高度设定并不一定有效. IE7的select高度的显示和option有关.例如:(以下计算忽略border,padding,margin) 一个option高度是22px, css样式: select{height: 100px;} 100/22 = 4.xxxx, 那么实际的高度就是4*22 = 88px 如果设定的是 select{height: 110px;} 110/22 = 5, 实际高度就是5*22 = 110px 如果高度不够下一个option显示的话