当我们使用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的一些问题的更多相关文章

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

    四元数介绍 旋转,应该是三种坐标变换--缩放.旋转和平移,中最复杂的一种了.大家应该都听过,有一种旋转的表示方法叫四元数.按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法--矩阵旋转和欧拉旋转. ...

  2. 四元数(Quaternion)和旋转(转)

    http://blog.csdn.net/candycat1992/article/details/41254799 四元数介绍 旋转,应该是三种坐标变换--缩放.旋转和平移,中最复杂的一种了.大家应 ...

  3. 四元数(Quaternion)和旋转

    四元数介绍 旋转,应该是三种坐标变换——缩放.旋转和平移,中最复杂的一种了.大家应该都听过,有一种旋转的表示方法叫四元数.按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法——矩阵旋转和欧拉旋转. ...

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

    什么是Quaternion四元数 1843年,William Rowan Hamilton发明了四元数,但直到1985年才有一个叫Ken Shoemake的人将四元数引入计算机图形学处理领域.四元数在 ...

  5. 【Unity技巧】四元数(Quaternion)和旋转

    四元数介绍 旋转,应该是三种坐标变换--缩放.旋转和平移,中最复杂的一种了.大家应该都听过,有一种旋转的表示方法叫四元数.按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法--矩阵旋转和欧拉旋转. ...

  6. Unity3D - 详解Quaternion类(一)

    一.简介 Quaternion又称四元数,由x,y,z和w这四个分量组成,是由爱尔兰数学家威廉·卢云·哈密顿在1843年发现的数学概念.四元数的乘法不符合交换律.从明确地角度而言,四元数是复数的不可交 ...

  7. 四元数(Quaternion)和旋转 +欧拉角

    四元数介绍 旋转,应该是三种坐标变换--缩放.旋转和平移,中最复杂的一种了.大家应该都听过,有一种旋转的表示方法叫四元数.按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法--矩阵旋转和欧拉旋转. ...

  8. 【转载】Unity中矩阵的平移、旋转、缩放

    By:克森 简介 在这篇文章中,我们将会学到几个概念:平移矩阵.旋转矩阵.缩放矩阵.在学这几个基本概念的同时,我们会用到 Mesh(网格).数学运算.4x4矩阵的一些简单的操作.但由于克森也是新手,文 ...

  9. Gear VR开发

    下载安装Unity开发工具,要求Unity 5.3.0 或更高版本         下载Oculus签名,做Gear VR交互功能模块.关于输入交互,可以下载VR Samples(地址:https:/ ...

随机推荐

  1. Codeforces Round #339 Div.2 C - Peter and Snow Blower

    Peter got a new snow blower as a New Year present. Of course, Peter decided to try it immediately. A ...

  2. java多线程之:创建开启一个线程的开销

    ---->关于时间,创建线程使用是直接向系统申请资源的,这里调用系统函数进行分配资源的话耗时不好说.---->关于资源,Java线程的线程栈所占用的内存是在Java堆外的,所以是不受jav ...

  3. powershell samples

    1,导出至EXCEL $arr =New-Object System.Collections.ArrayList $i = 1 $pstablelist = @(); $array =get-user ...

  4. 出现Fatal IO error 11 (资源暂时不可用) on X server :0.0.的可能原因及解决方案

    我在使用python的过程当中发现了这个有这样的错误,后来看了下面这篇文档才知道原因所在. 最近在编写一个局域网的聊天工具,在编写客户端时,我把界面部分和事件处理函数写好后,准备再开一个线程用于接收服 ...

  5. C++文件输入和输出

    1.引入头文件fstreamfstream头文件定义了用于文件输入的类ifstream和文件输出的类ofstream 2.写文件1)创建一个ofstream对象来管理输出流2)将该对象与文件关联起来3 ...

  6. ABBYY PDF Transformer+从文件选项中创建PDF文档的教程

    可使用OCR文字识别软件ABBYY PDF Transformer+从Microsoft Word.Microsoft Excel.Microsoft PowerPoint.HTML.RTF.Micr ...

  7. 二十四种设计模式:原型模式(Prototype Pattern)

    原型模式(Prototype Pattern) 介绍用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象.示例有一个Message实体类,现在要克隆它. MessageModel usin ...

  8. oracle schema object

    Oracle supplies many PL/SQL packages with the Oracle server to extend database functionality and pro ...

  9. 最短路径—Dijkstra算法和Floyd算法【转】

    本文来自博客园的文章:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html Dijkstra算法 1.定义概览 Dijk ...

  10. 搭建EF6.0+MVC4搭建框架——之路由配置

    为了适应项目需求,需要将前后台的控制器和视图等文件分开,便于修改和维护: 方案一:在原有的Controller下新增Admins文件夹用于放置后台控制器文件: 控制器文件目录如下图: 视图文件目录: