- 浏览: 186696 次
- 性别:
- 来自: 无锡
文章分类
最新评论
-
luoqianjiang:
很好,谢谢
一些iOS高效开源类库 -
sgjsdf5944:
没看明白。。。。。。。。。。
UIWebView打开doc、pdf文件 -
593864589:
mac 上不支持呢?
cocos2d 粒子设计器 -
寻墨小楼:
多谢了...正在弄这个。
mysql for mac 安装和基本操作 -
yueliancao:
楼主如何联系啊 我的MAC系统 #LoadModule php ...
mac OS x中配置apache + php + mysql
在进入下一篇关于骨骼动画的文章之前,让我们先花点时间来了解一个马上会使用到的新数据类型:四元数[译者注:关于四元数的概念可以参考这个链接:点我]。我们用四元数存储单一骨骼在3个轴线上的旋转信息,换句话说,存储的是骨骼指向的方向。在下一部分介绍的仿真骨骼动画中,你将会看到,模型的顶点是同一个或多个骨骼相关联的,当骨骼移动时它们也会随之变化。相对于将欧拉角信息存储在3个GLfloats变量或一个 Vector3D 变量里来说, 使用四元数有2个优点:
1.四元数不会造成万向节死锁(gimbal lock),但是欧拉角容易造成万向节死锁,使用四元数能够让我们的3D模型能够全方位的移动。
2.相比于给每个欧拉角做矩阵旋转转换计算,使用四元数结合多角度旋转可以显著的减少计算量。
从某些方面来看,四元数极其复杂且难于理解。它们是高级数学:完全疯狂的符咒。幸运的是,你不需要完全理解它们背后的数学含义。但是,我们现在需要使用它们来完成骨骼动画,所以还是值得我们花费些时间来讨论下它们的概念和怎么使用它们。
Discovery探索
从数学上讲,四元数是复数的一个扩展延伸,于1843年由Sir William Rowan Hamilton 发现。技术上讲,四元数表现为实数之上的4维正规可除代数。Zoiks!更简单的讲,四元数被认为是第四维度用来计算笛卡尔坐标中的3个坐标值。好吧,一切可能不那么简单,对吧?
先别怕,如果你不精通高等数学,四元数可能会让你头疼。但是,如我之前所说,如果你只是使用它们,完全不必深入了解。这玩意和你见过的一些概念是非常类似的。不知你是否还能想起我们在3维空间里涉及到的4X4矩阵的矩阵转换。当我们使用已转换的数据的时候,忽略了第4个值。我们可以把这里的第四个值当成四元数,为计算提供了一个位置。数学范畴内,请不要跟我说——过度简化有助于凡人在四元数世界里占有一席之地,有所作为。
四元数在探索时代里被认为是相当创新的,但最繁荣的时期却如此短暂。在1880中期,向量微积分开始在计算领域取代四元数理论,因为它用了一种更为容易理解和描述的概念描述了同样的现象。
Not Quite Dead Yet!虽死犹生
但在20世纪,四元数又重新获宠。正如我们在part 7里讨论的,有一个被称为gimbal lock 的现象,当你在每个轴线单独做旋转转换的时候就会发生,此现象的危害就是可能导致在三个轴中的一个轴上停止旋转。
尽管事实是四元数源于复数和理论数学,但它们都有实际应用。其中一个实际应用是三轴线上旋转角的展现。由于四元数用四个维度展示了笛卡尔(或三轴)旋转,此展现不会导致gimbal lock,而且你可以在四元数和旋转矩阵之间,四元数和欧拉角之间进行无损转换。这使得存储某些对象的旋转信息相当完美,比如。。。骨骼框架中的单独骨骼?不需要存贮3轴的角信息,而是存储一个单独的四元数。
四元数和矩阵一样,可以相乘,且存储于不同四元数中的旋转值通过相乘来合并计算。四元数乘积和2个旋转矩阵乘积的结果是完全一样的,考虑到减少计算量,这意味着除了要避免gimbal lock,还要减少每次程序循环运行的FLOPS(每秒浮点运算次数)。和矩阵乘法相比,四元数乘法不仅步骤少,而且可以通过一个四元数表达3轴所有数据。如果通过Vector3D 或3个GLfloats来存储旋转信息,我们经常不得不做3次矩阵乘法——每轴都要算一次。结论是,通过把存储旋转的独立角信息存为四元数,可以带来可观的性能提升。
The Quaternion Struct 四元数结构体
|
发表评论
-
OpenGL ES2.0 – Iphone开发指引
2012-01-13 20:03 1001原文链接地址:http://www.raywenderlich ... -
OpenGL ES2.0 Iphone开发指引:part2 纹理贴图
2012-01-13 20:04 1245原文链接地址:htt ... -
OpenGL ES for iPhone: Drawing a Circle - Part III
2012-01-13 20:05 896原文地址:http://vormplus.be/b ... -
OpenGL ES for iPhone: Drawing a Circle - Part II
2012-01-13 20:12 995原文地址:http://vormplus.be/b ... -
OpenGL ES for iPhone: Drawing a Circle - Part I
2012-01-18 12:19 962原文地址:http://vormplus.be/blog ... -
OpenGL ES 从零开始系列9a:动画基础和关键帧动画
2012-01-18 12:21 1934最初这篇教程我并 ... -
OpenGL ES 从零开始系列08:交叉存取顶点数据
2012-01-18 12:22 1092Technote 2230提出了很多用OpenGL ES来提升 ... -
从零开始学习OpenGL ES之四补遗 – setupView重写
2012-01-18 12:22 904我在从零开始学习OpenGL ES之四 – 光效 ... -
从零开始学习OpenGL ES之七 – 变换和矩阵
2012-01-29 16:03 1659今天的主题是我 ... -
从零开始学习OpenGL ES之六 – 纹理及纹理映射
2012-01-29 16:03 1427在OpenGL ES中另一种为 ... -
从零开始学习OpenGL ES之五 – 材质
2012-01-29 16:04 1659在 上一篇文章,我们讨论了光效的设定以及光效的各种属性 ... -
从零开始学习OpenGL ES之四 – 光效
2012-01-06 00:05 1290继续我们的iPhone OpenGL ES之旅,我们将 ... -
从零开始学习OpenGL ES之三 – 透视
2012-01-06 00:04 929现在你已经知道O ... -
从零开始学习OpenGL ES之一 – 基本概念
2012-01-02 22:28 1056我曾写过一些文章介绍iPhone OpenGL ES编 ...
相关推荐
openGL相关的四元数类。包括与欧拉角的转换和矩阵类的转换。
代码!!!!重要!!!! 学习中关于机器人领域中四元数、欧拉角、旋转矩阵、旋转向量的相互转换关系总结,整理加深记忆。 每一个都有相互转换关系,并注释
Qt Creator+opengl实现鼠标交互,控制模型任意旋转,实现轨迹球, 里面的void Widget::drawarrow(GLdouble x0, GLdouble y0, GLdouble z0, GLdouble x1, GLdouble y1, GLdouble z1)这个函数实现,空间任意两点绘制...
文章Unity3D学习笔记05:四元数控制人物旋转的脚本代码
适用于Windows的四元数转换和可视化程序。 包括3D OpenGl图形,实时四元数文件回放,以及用于通过TCP从远程计算机接收和显示四元数数据的服务器。 还显示欧拉角和DCM。
这是关于使用四元数数学进行旋转的讨论。 它使用一些计算机科学术语:“过载”和“接口” 该说明包含两个python文件:qa3.py和drawPrims.py 一些计算机科学术语将用于解释四元数:“过载”和“接口” 在本文中,...
这个是OpenGL相关的矩阵类,其中实现了包括了平移矩阵、旋转矩阵、缩放矩阵等各种矩阵变换的实现以及欧拉角和四元数的相关转换。
quat.js 四元数数学
这是基于 Cayley-Dickson 构造的四元数实现。 它利用数据类的递归和继承。 定义了一个名为“komplex”的基本类型,它的作用类似于 MatLab 的复杂类型,但可以继承。 它用于递归定义其他数据类型。 以这种方式支持三...
matlab傅里叶描述子代码四元数通用傅里叶描述符(QGFD) 该存储库提供用于颜色对象识别的四元数通用傅里叶描述符(QGFD)的代码。 要使用此软件包,必须使用Matlab的四元数工具箱。 可从Sangwine的个人页面上找到。 ...
这个简单的库使用四元数和 R^4 之间的同构在 Matlab 中实现了四元数代数。 它还实现了欧拉角和罗德里格斯公式以及四元数版本的许多组合的旋转矩阵。 该库还包含一个 3D 可视化工具。 总结描述功能: 和和减法通常由...
因为 3D 空间还是在我们理解范围之内的,所以四元数与 三维旋转的一些关系可以直接使用一些基础的几何学和线性代数的知识来推 导和理解,并不会那么复杂.我们在大部分的时间中也会采用这一方式来理 解四元数,如果...
欧拉公式求长期率的matlab代码卡尔曼ios 免责声明:我前一段时间写了这个仓库。 我不再认为它是姿态过滤器的良好参考实现。 如果今天我要重新编写代码...四元数表示法在所有可能的方向(无奇点)上在数学上都很紧凑并且
一种比较笨拙的方法来实现触摸旋转,下一部分会使用四元数来实现。
四元数、欧拉角和罗德里格斯参数变换库 以下列表说明了问题变量theta:旋转角度 [rad] e: 轴向量 [e1;e2;e3] R:关联旋转矩阵 [3,3] x: 第一个欧拉角 (x, roll,theta) y:第二欧拉角(y,螺距,phi) z: 第三欧拉角 ...
Simulink 的四元数库版本 1.7 (JASP) 2009 年 12 月 12 日 这是一个允许操作四元数的块库。 可用的块是: 四元数归一化四元数共轭四元数乘法 四元数传播四元数向量变换四元数矢量旋转 四元数分解四元数到 DCM DCM ...
3. **水印嵌入**:将水印信息嵌入到图像的四元数表示中,可采用一系列技术,如LSB替换、直接加减等方法,保证水印嵌入后对图像视觉效果的影响较小。 4. **水印提取**:在水印嵌入后,通过特定的提取算法,如相关性...
四元数转欧拉角matlab,四元数转欧拉角matlab,四元数转欧拉角matlab,
关于四元数矩阵的数值计算,工作较少,尤其是四元数矩阵奇异特征值的计算,基本上尚未开始研究,难度很大。解决四元数矩阵的特征值问题同样具有非常重要的意义。设A是一个四元数矩阵,若λ满足Ax=λx(Ax=xλ)...
opengl画圆柱体、圆锥、正方体等并使用arcball+四元数旋转控制(vs2019+glut+glew实现)