【3D计算机图形学】变换矩阵、欧拉角、四元数

【3D计算机图形学】变换矩阵、欧拉角、四元数

旋转矩阵、欧拉角、四元数主要用于:向量的旋转、坐标系之间的转换、角位移计算、方位的平滑插值计算。

 

一、变换矩阵:

首先要区分旋转矩阵和变换矩阵:

旋转矩阵:向量绕某一个轴旋转,用3x3的矩阵表示。

变换矩阵:向量的移动、旋转、缩放,用4x4的矩阵表示。

这里额外补充一个知识,就是三维坐标变换是用4x4矩阵(采用齐次坐标)而不是3x3矩阵的原因是:统一平移和缩放(本来是向量加法来描述)为矩阵乘法的形式来计算。所以旋转矩阵也扩展为4x4矩阵,这样一来,平移矩阵、缩放矩阵、旋转矩阵可以相乘最后结果为一个唯一的变换矩阵。

可以参考下面这篇文章,解释的很清楚:

http://www.tuicool.com/articles/jMzuIfA

旋转矩阵的推导过程网上有很多,这里不再赘述。可以参考如下文章:

http://blog.csdn.net/ningyaliuhebei/article/details/7481679

http://blog.chinaunix.net/uid-25296429-id-5133776.html

二、欧拉角:

欧拉角的基本思想是将角位移分解为绕三个互相垂直轴的三个旋转组成的序列。所以,欧拉旋转的三个角,可以对应于三个旋转矩阵。

Yaw(偏航):欧拉角向量的y轴

Pitch(俯仰):欧拉角向量的x轴

Roll(翻滚): 欧拉角向量的z轴

Unity3D中,欧拉旋转是按照ZYX的顺序旋转的。(不同的旋转顺序最终得到的结果是不一样的,要引起重视)

三、四元数:

四元数的定义:

一个四元数可以表示为q = w + xi + yj + zk,现在就来回答这样一个简单的式子是怎么和三维旋转结合在一起的。为了方便,我们下面使用q = ((x, y, z),w) = (v, w),其中v是向量,w是实数,这样的式子来表示一个四元数。

我们先来看问题的答案。我们可以使用一个四元数q=((x,y,z)sinθ2, cosθ2) 来执行一个旋转。具体来说,如果我们想要把空间的一个点P绕着单位向量轴u
= (x, y, z)表示的旋转轴旋转θ角度,我们首先把点P扩展到四元数空间,即四元数p = (P,
0)。那么,旋转后新的点对应的四元数(当然这个计算而得的四元数的实部为0,虚部系数就是新的坐标)为:

p′=qpq?1

其中,q=(cosθ2, (x,y,z)sinθ2) ,q?1=q?N(q)

当然,四元数不仅可以用来方便的进行向量旋转计算,还能够用于平滑插值计算等。

四元数更多的介绍参看下面的链接;

http://www.cnblogs.com/mengdd/archive/2013/08/05/3238223.html

四、旋转矩阵、欧拉角、四元数比较:

下面的总结来源于网络:http://blog.csdn.net/pizi0475/article/details/6278526


任务/性质


旋转矩阵


欧拉角


四元数


在坐标系间(物体和惯性)旋转点



不能(必须转换到矩阵)


不能(必须转换到矩阵)


连接或增量旋转


能,但经常比四元数慢,小心矩阵蠕变的情况


不能


能,比矩阵快


插值


基本上不能


能,但可能遭遇万向锁或其他问题


Slerp提供了平滑插值


易用程度





在内存或文件中存储


9个数


3个数


4个数


对给定方位的表达方式是否唯一



不是,对同一方位有无数多种方法


不是,有两种方法,它们互相为互


可能导致非法


矩阵蠕变


任意三个数都能构成合法的欧拉角


可能会出现误差积累,从而产生非法的四元数

不同的方位表示方法适用于不同的情况。下面是我们对合理选择格式的一些建议:

欧拉角最容易使用。当需要为世界中的物体指定方位时,欧拉角能大大的简化人机交互,

包括直接的键盘输入方位、在代码中指定方位(如为渲染设定摄像机)、在调试中测试。这个优点不应该被忽视,不要以”优化”为名义而牺牲易用性,除非你去顶这种优化的确有效果。

如果需要在坐标系之间转换响亮,那么就选择矩阵形式。当然,这并不意味着你就不能用其他格式来保存方位,并在需要的时候转换到矩阵格式。另一种方法是用欧拉角作为方位的”主拷贝”但同时维护一个旋转矩阵,当欧拉角发生改变时矩阵也要同时进行更新。

当需要大量保存方位数据(如:动画)时,就使用欧拉角或四元数。欧拉角将少占用25%的内存,但它在转换到矩阵时要稍微慢一些。如果动画数据需要嵌套坐标系之间的连接,四元数可能是最好的选择。

平滑的插值只能用四元数完成。如果你用其他形式,也可以先转换到四元数然后再插值,插值完毕后再转换回原来的形式。

五、欧拉角与四元数的转换:

参看下面一篇文章,讲的比较通俗易懂:

http://www.cnblogs.com/wqj1212/archive/2010/11/21/1883033.html

六、Unity3D中变换矩阵(平移、缩放、旋转)、欧拉角、四元数有关的类和相互之间的转换:

Quaternion:四元数类。

Matrix4x4:变换矩阵类。

Vector3:欧拉角用此表示就可以了。

四元数转欧拉角:

  1. public Quaternion rotation = Quaternion.identity;
  2. print(rotation.eulerAngles.x);
  3. print(rotation.eulerAngles.y);
  4. print(rotation.eulerAngles.z);

欧拉角转四元数:

  1. public Quaternion rotation = Quaternion.Euler(0, 30, 0);//Euler方法即通过一个Vector3的欧拉角返回一个四元数

四元数转变换矩阵:

  1. Quaternion q = Quaternion.LookRotation(new Vector3(0,0.5,1));
  2. Matrix4x4 rot = new Matrix4x4();
  3. rot.SetTRS(new Vector3(0,0,0),q,new Vector3(1,1,1));

变换矩阵转四元数:

    1. Matrix4x4 rot = new Matrix4x4();
    2. rot.SetTRS(new Vector3(0,0,0),q,new Vector3(1,1,1));
    3. Vector4 vy = rot.GetColumn(1);
    4. Vector4 vz = rot.GetColumn(2);
    5. Quaternion newQ = Quaternion.LookRotation(new Vector3(vz.x,vz.y,vz.z),new Vector3(vy.x,vy.y,vy.z));
时间: 2024-10-29 21:13:02

【3D计算机图形学】变换矩阵、欧拉角、四元数的相关文章

3D计算机图形学零起点全攻略(转)

3D计算机图形学零起点全攻略 这篇文章不包含任何技术知识,但我的希望它能指明一条从零开始通往3D领域的成功之路.我将罗列我看过的相关经典书籍作为学习文献,阅读规则是每进入下个内容,我都会假设已经完成前面全部的文献研习内容.相信若能按照这条路走到最后,会有所进益. 完成整部分内容需要具备基础: 英语:CET4以上 数学:精通数字加减乘除法. 物理:基本力学. 计算机:了解电脑的基本知识,熟练使用Windows. 电脑配置: CPU:双核1.5以上 显卡:NVIDIA GeForce8400G MS

计算机图形学 复习笔记

计算机图形学 复习笔记 (个人整理,仅做复习用 :D,转载注明出处:http://blog.csdn.net/hcbbt/article/details/42779341) 第一章 计算机图形学综述 研究内容 图形的概念:计算机图形学的研究对象 能在人的视觉系统中产生视觉印象的客观对象 包括自然景物.拍摄到的图片.用数学方法描述的图形等等 图形的要素 几何要素:刻画对象的轮廓.形状等 非几何要素:刻画对象的颜色.材质等 图形表示法 点阵表示 枚举出图形中所有的点,简称为图像. 参数表示 由图形的

【转载】计算机图形学框架

原文: 计算机图形学框架 应用 基本图形生成算法 图元光栅化标准 直线要直 图元终点要准 图元生成的亮度.色泽粗细要均匀 快速计算 直线光栅化算法 逐点比较法 数值微分法 中点Bresenham算法 圆的光栅化算法 简单方程产生圆弧 Bresenham算法产生圆弧 多边形填充 扫描线填充 宽图元 复制像素画宽图元 移动画笔画宽图元 3D数学基础 坐标系 向量 矩阵 空间集合运算 集合形体的表达 几何体之间的关系 图形变换 二维及三维图形几何变换 二维图形几何变换 平移变换 比例变换 旋转变换 错

计算机图形学的学习资源

计算机图形学(Computer Graphics,简称CG)是一个令人着迷的领域,本文整理了一些图形学相关的学习资源. Wikipedia的介绍,及其后面附的"参考文献"和"外部链接"总是值得一看的: Computer graphics:主要介绍图形学的历史: Computer graphics (computer science):介绍图形学学科,后面附了知名研究者,以及著名大学的图形学小组: 3D computer graphics:这是图形学中最重要的部分:

计算机图形学名词解释

转自 http://blog.csdn.net/lwfcgz/article/details/39254743 3D三维(three dimension).客观世界中静止的物体都是三维的,在计算机图形学中常在一定的坐标系中用(x,y,z)坐标系列表示物体. 3D modeling3D建模.用三维坐标来描述物体的形状.在各种计算机图形应用领域中有不同的三维建模方法,用不同的算法来描述这些领域中的物体和对象. 3D transformation3D变换.在三维空间中把物体的三维坐标从一个位置变换至另

学习shader之前必须知道的东西之计算机图形学(一)渲染管线

引言 shader到底是干什么用的?shader的工作原理是什么? 其实当我们对这个问题还很懵懂的时候,就已经开始急不可耐的要四处搜寻有关shader的资料,恨不得立刻上手写一个出来.但看了一些资料甚至看了不少cg的语法之后,我们还是很迷茫,UNITY_MATRIX_MVP到底是个什么矩阵?它和v.vertex相乘出来的又是什么玩意?当这些问题困扰我们很久之后,我们才发现,原来我们是站在浮沙上筑高台,根基都没有打牢当然不可能盖得起高楼大厦了. 那根基是什么呢?大牛曰,计算机图形学. shader

计算机图形学学习方法和相关书籍,做游戏,GIS,虚拟现实,三维引擎的都可以看看.

本书参照<<图形学扫盲>> 整理的,原文内容引子: http://www.cppblog.com/lai3d/archive/2008/12/30/70796.html 前言: 以我现在的水平观之,3D图形学分3大块的学习内容: a.空间几何数学:空间几何变换,加速算法,多边形技术,曲线和曲面,相交测试,碰撞测试. b.光照着色系统:光照,纹理贴图,高级象素着色光照,艺术性渲染. c.程序技术性应用:公告板,精灵,天空盒,体绘制,材质系统,场景图,渲染队列. 在实际学习过程中,3个

计算机图形学中的经常使用模型

今天在网上搜了一下图形学里面比較经常使用的模型.认为挺有意思,把它们收集起来,总结一下. 1.Lena/Lenna 这个模型是一个美女,名字叫Lena,是1972年11月<Playboy>(国内译为:花花公子)杂志的一个插图. 不知道花花公子杂志为何物的请自己去百度. Lena是瑞典人.依据英语标准发音,译为Lenna. 以下来张截图: 花花公子中的原图:http://www.ee.cityu.edu.hk/~lmpo/lenna/len_full.jpg 1973年6月.美国南加州大学的信号

计算机图形学研究常用工具软件和代码

Computer Graphics Research Software Helping you avoid re-inventing the wheel since 2009! Last updated December 5, 2012.Try searching this page for keywords like 'segmentation' or 'PLY'.If you would like to contribute links, please e-mail them to [ema