关于Rotation和Quaternion的一些问题
当我们使用unity的时候,面对一个物体,一个不可避免的问题就是:控制物体的旋转。
unity的Transform组件的第二个属性Rotation为我们提供控制物体旋转的功能。在一个物体的Inspector面板中,我们可以看到三个信息(X,Y,Z)。但是unity同时还具有Quaternion(四元数)的功能,所以这里就有必要介绍一下——欧拉角与四元数(能力有限,只是简单的为大家介绍一下),而unity采用这两种方式来表示旋转或者方向都是为了便于储存。
欧拉角(Euler angles):简单来说就是一种定义物体方向的方法

如图所示,为我们展示了欧拉角,包括(α,β,γ)。另外还有一条特殊的绿色线N。对于上图作几点说明:
蓝色坐标系xyz(小写)表示原始或初始坐标系位置(方向);红色坐标系(XYZ)表示旋转后的坐标方向。绿色的线(line of nodes)是xy和XY坐标平面的交线,那么这条线也就同时正交垂直于zZ平面。
α:x与N的夹角;β:z与Z的夹角 γ:N与X的夹角
四元数(Quaternion)
很抱歉,对于四元数的理解,现在我也不是很清楚,只是简单的对unity的Quaternion的几个函数方法进行了简单了解。下面是百度百科的解释,希望对你有所帮助:
四元数是简单的超复数。 复数是由实数加上虚数单位 i 组成,其中i^2 = -1。 相似地,四元数都是由实数加上三个虚数单位 i、j、k 组成,而且它们有如下的关系: i^2 = j^2 = k^2 = -1, i^0 = j^0 = k^0 = 1 , 每个四元数都是 1、i、j 和 k 的线性组合,即是四元数一般可表示为a + bk+ cj + di,其中a、b、c 、d是实数。(百度百科)
关于四元数和欧拉角之间的互相转换,这里就不再赘述,因为看不懂啊,等体会理解后,在为大家讲解
这里有一篇关于Quaternion下函数方法详细介绍:http://blog.sina.com.cn/s/blog_4a2183a60100ngaa.html
说了这么多,其实我想为大家解释的是:下面这样一个问题:unity什么时候用欧拉角,什么时候使用四元数。
在我们的接触中,unity大部分是接受四元数的输入和输出的。比如说,我们想输出Transform组件的Rotation信息。直接这样写:transform.rotation是不行的,你会发现显示的是一组[-1,1]的数值。而需要调用localEulerAngles方法,才会获得我们所熟知的角度表示。总结来说:其实Transform.rotation是存储的四元数信息,而真正的欧拉角需要调用方法才会获得,即Euler Angles存储的Vector3类型的变量。
我们如何在unity中将一个Vector3类型的欧拉角传给四元数形式的rotation呢?我们不需要复杂的数学运行,需要调用Quaternion下面的方法函数即可。
transform.rotation=Quaternion.Euler(x,y,z)或者是transform.EulerAngles=new Vector(0.0,0.0,0.0)
最后,介绍一下lerp与slerp的区别
lerp()函数,我们都很了解,进行插值运算,对于物体平移,使用lerp函数,十分方便。这里就不过多说明了,详细请看unity 圣典。然而对于物体旋转方向的插值,效果就不那么理想了。其实unity还为我们提供了另一种插值函数---Slerp。Quaternion.lerp()。关于这个函数在圣典中的说明很短,只解释是球形插值。让人费解。关于这个问题我的理解是,如果想要对物体的旋转进行插值,我们应该选择slerp函数,这个函数利用四元数,对旋转的角度进行插值,(至于更深层次的机制,我也不甚了解,希望大家留言补充)从而能够达到较为理想的效果。另外,还有Quaternion.lerp()函数,这个说是效果也不如slerp。大家可以自行尝试。下面是关于slerp函数的代码解释
static function Slerp (from : Quaternion, to : Quaternion,t : float) : Quaternion
注意form和to都是Quaternion四元数类型,而不是vector3类型。
Quaternion.Slerp (Quaternion.Euler(rotation_begin),Quaternion.Euler(rotation_end),t);
Euler()方法是为了将Vector3类型转换成四元数类型。这是slerp函数的参数要求
关于Rotation和Quaternion的一些问题的更多相关文章
- 【转】四元数(Quaternion)和旋转
四元数介绍 旋转,应该是三种坐标变换--缩放.旋转和平移,中最复杂的一种了.大家应该都听过,有一种旋转的表示方法叫四元数.按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法--矩阵旋转和欧拉旋转. ...
- 四元数(Quaternion)和旋转(转)
http://blog.csdn.net/candycat1992/article/details/41254799 四元数介绍 旋转,应该是三种坐标变换--缩放.旋转和平移,中最复杂的一种了.大家应 ...
- 四元数(Quaternion)和旋转
四元数介绍 旋转,应该是三种坐标变换——缩放.旋转和平移,中最复杂的一种了.大家应该都听过,有一种旋转的表示方法叫四元数.按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法——矩阵旋转和欧拉旋转. ...
- [Unity Quaternion]四元数Quaternion的计算方式
什么是Quaternion四元数 1843年,William Rowan Hamilton发明了四元数,但直到1985年才有一个叫Ken Shoemake的人将四元数引入计算机图形学处理领域.四元数在 ...
- 【Unity技巧】四元数(Quaternion)和旋转
四元数介绍 旋转,应该是三种坐标变换--缩放.旋转和平移,中最复杂的一种了.大家应该都听过,有一种旋转的表示方法叫四元数.按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法--矩阵旋转和欧拉旋转. ...
- Unity3D - 详解Quaternion类(一)
一.简介 Quaternion又称四元数,由x,y,z和w这四个分量组成,是由爱尔兰数学家威廉·卢云·哈密顿在1843年发现的数学概念.四元数的乘法不符合交换律.从明确地角度而言,四元数是复数的不可交 ...
- 四元数(Quaternion)和旋转 +欧拉角
四元数介绍 旋转,应该是三种坐标变换--缩放.旋转和平移,中最复杂的一种了.大家应该都听过,有一种旋转的表示方法叫四元数.按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法--矩阵旋转和欧拉旋转. ...
- 【转载】Unity中矩阵的平移、旋转、缩放
By:克森 简介 在这篇文章中,我们将会学到几个概念:平移矩阵.旋转矩阵.缩放矩阵.在学这几个基本概念的同时,我们会用到 Mesh(网格).数学运算.4x4矩阵的一些简单的操作.但由于克森也是新手,文 ...
- Gear VR开发
下载安装Unity开发工具,要求Unity 5.3.0 或更高版本 下载Oculus签名,做Gear VR交互功能模块.关于输入交互,可以下载VR Samples(地址:https:/ ...
随机推荐
- poj3259 最短路判环
题意:有一些点.一些道路和一些虫洞,道路是双向的,连接两点,花费正的时间,而虫洞是单向的,连接两点,可以使时间倒退,求是否能够回到过去. 只要明确回到过去其实就是当出现一个负环的时候,不断沿这个环走, ...
- 嵌入式Linux开发——内容介绍与开发环境的搭建
嵌入式Linux开发步骤 设计自己的硬件系统 编写Bootloader 裁剪自己的Linux内核 开发移植设备驱动 构建根文件系统 开发应用程序 嵌入式Linux学习要点 熟练使用开发工具和相关指令集 ...
- 计算机算法-C语言-统计字母数字个数解
Question:输入一串以“?”结尾的字符,分别统计其中字母数字的个数,输出字母及数字的个数. Solve: #include<stdio.h> #include<stdlib.h ...
- MMU讲解
MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器.物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制 ...
- SQL 将一列多行数据合并为一行 FOR XML PATH
FOR XML PATH 方法是用于将查询结果集以XML形式展示,这样展示方式的好处不言而喻.现在我要介绍的FOR XML PATH的"另类"用法. 首先,我们先来看看它的正常用法 ...
- 虚拟化之vmware DirectPath I/O
首先Intel这边,必须CPU支持VT-D,基本就是i5/i7的型号,而且部分i5中低端型号还不支持,带K的不支持.同时主板要开启VT-D支持,这些从775时代开始就有了,所以型号搭配复杂.AMD那边 ...
- SpringMVC的各种参数绑定方式
1. 基本数据类型(以int为例,其他类似):2. 包装类型(以Integer为例,其他类似):3. 自定义对象类型:4. 自定义复合对象类型:5. List绑定:6. Set绑定:7. Map绑定: ...
- Format可能存在的坑
import java.text.MessageFormat; public class TestFormat { public static void main(String[] args) { / ...
- [mysql] mysql 5.6.27 innodb 相关参数
mysql> show variables like '%innodb%';+------------------------------------------+--------------- ...
- ios9 URL Schemes列为白名单,才可正常检查其他应用是否安装
http://my.oschina.net/u/1244672/blog/512210 如果你在模拟器上运行可以能还会有以下报错: -canOpenURL: failed for URL: “weix ...