- 浏览: 191728 次
- 性别:
- 来自: 无锡
文章分类
最新评论
-
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 1048原文链接地址:http://www.raywenderlich ... -
OpenGL ES2.0 Iphone开发指引:part2 纹理贴图
2012-01-13 20:04 1269原文链接地址:htt ... -
OpenGL ES for iPhone: Drawing a Circle - Part III
2012-01-13 20:05 939原文地址:http://vormplus.be/b ... -
OpenGL ES for iPhone: Drawing a Circle - Part II
2012-01-13 20:12 1033原文地址:http://vormplus.be/b ... -
OpenGL ES for iPhone: Drawing a Circle - Part I
2012-01-18 12:19 1000原文地址:http://vormplus.be/blog ... -
OpenGL ES 从零开始系列9a:动画基础和关键帧动画
2012-01-18 12:21 1978最初这篇教程我并 ... -
OpenGL ES 从零开始系列08:交叉存取顶点数据
2012-01-18 12:22 1128Technote 2230提出了很多用OpenGL ES来提升 ... -
从零开始学习OpenGL ES之四补遗 – setupView重写
2012-01-18 12:22 944我在从零开始学习OpenGL ES之四 – 光效 ... -
从零开始学习OpenGL ES之七 – 变换和矩阵
2012-01-29 16:03 1743今天的主题是我 ... -
从零开始学习OpenGL ES之六 – 纹理及纹理映射
2012-01-29 16:03 1478在OpenGL ES中另一种为 ... -
从零开始学习OpenGL ES之五 – 材质
2012-01-29 16:04 1696在 上一篇文章,我们讨论了光效的设定以及光效的各种属性 ... -
从零开始学习OpenGL ES之四 – 光效
2012-01-06 00:05 1340继续我们的iPhone OpenGL ES之旅,我们将 ... -
从零开始学习OpenGL ES之三 – 透视
2012-01-06 00:04 967现在你已经知道O ... -
从零开始学习OpenGL ES之一 – 基本概念
2012-01-02 22:28 1086我曾写过一些文章介绍iPhone OpenGL ES编 ...
相关推荐
3. **与矩阵的转换**:`fromMatrix()`从旋转矩阵生成四元数,`toMatrix()`将四元数转换为旋转矩阵。 4. **旋转操作**:`rotate()`方法允许添加或合并两个四元数表示的旋转。 5. **插值**:`slerp()`方法实现四元数...
- 创建四元数:可以使用`quatcreate`函数创建四元数,例如`quatcreate([1 0 0 0])`创建单位四元数表示零角度旋转。 - 旋转向量:使用`quatrotate`函数,如`quatrotate(q, [1 0 0])`将x轴向量绕四元数q旋转。 6. *...
代码!!!!重要!!!! 学习中关于机器人领域中四元数、欧拉角、旋转矩阵、旋转向量的相互转换关系总结,整理加深记忆。 每一个都有相互转换关系,并注释
Qt Creator+opengl实现鼠标交互,控制模型任意旋转,实现轨迹球, 里面的void Widget::drawarrow(GLdouble x0, GLdouble y0, GLdouble z0, GLdouble x1, GLdouble y1, GLdouble z1)这个函数实现,空间任意两点绘制...
对于非零四元数q,其归一化四元数是q/||q||,其中||q||是q的范数。归一化四元数的范数为1,方便用于表示单位旋转。 5. **四元数求逆**:四元数q的逆是q^-1 = q*/||q||^2。当四元数代表旋转时,逆四元数表示相反方向...
1. `qGetQ.m`:这个函数可能是获取四元数的值,用于从特定输入(如旋转角度或旋转矩阵)构建四元数。 2. `qConj.m`:四元数共轭,返回四元数的共轭形式,即`q* = w - xi - yj - zk`。 3. `qNormalize.m`:四元数归一...
OpenGL ES 提供了一系列的函数调用来创建、管理和渲染3D图形。它的工作流程包括设置视口、投影、模型视图矩阵,定义顶点,设置颜色和纹理,以及绘制几何形状。立方体的构建通常涉及六个正方形面,每个面由四个顶点...
4. **欧拉角到四元数的转换**:相反的,也可以从三个欧拉角构建四元数。 5. **四元数与旋转矩阵的转换**:四元数可以转换为旋转矩阵,反之亦然,这对于处理刚体旋转非常有用。 6. **姿态解算**:利用传感器数据(如...
OpenGLES使用欧拉角(Euler Angles)或四元数(Quaternions)来描述旋转,但通常会转换为旋转矩阵。例如,绕Z轴旋转θ度的旋转矩阵为: ```cpp float rotationMatrix[16] = { cos(theta), -sin(theta), 0, 0, ...
OpenGL中的矩阵类是图形编程的核心部分,用于处理各种几何变换,如平移、旋转和缩放。矩阵在计算机图形学中扮演着至关重要的角色,它们能够有效地表示和组合这些变换,使得复杂的3D场景得以构建和渲染。在这个OpenGL...
在OpenGL ES中,我们使用欧拉角(Euler Angles)或者四元数(Quaternions)来表示旋转。对于绕X、Y、Z轴的旋转,可以分别用旋转矩阵Rx、Ry、Rz表示,然后通过矩阵相乘实现组合旋转。例如,绕X轴旋转θ角度的矩阵为:...
总的来说,这个教程系列会帮助学习者理解如何在iOS应用中利用OpenGL ES进行3D旋转,从基础的欧拉角和矩阵方法开始,逐渐过渡到更高级、更有效的四元数技术。对于希望深入研究iOS游戏开发或者增强现实应用的开发者来...
4. **状态机模型**:OpenGL ES采用状态机模型,这意味着设置一次的状态(如颜色、纹理、深度测试等)会在后续的绘制调用中持续生效,直到被新的状态覆盖。 5. **顶点着色器(Vertex Shader)和片段着色器(Fragment...
### 关于四元数的理解与应用 #### 一、四元数的概念与特性 四元数是由爱尔兰数学家威廉·罗恩·哈密顿在1843年发明的一种数学工具,它是一种扩展复数的概念,用于高效且精确地描述三维空间中的旋转。四元数在...
2. **3D OpenGL图形**:利用OpenGL库,QuatView可以实时渲染3D图形,直观展示由四元数描述的旋转效果。这有助于理解旋转的视觉表现,尤其是在进行动画或游戏开发时。 3. **实时文件回放**:用户可以加载包含四元数...
这个工具箱可能包含了一系列函数和脚本,旨在简化四元数的创建、操作、转换以及与其他数学表示(如旋转矩阵、欧拉角)的交互。 描述中提到的"matlab四元数工具箱兼容2019a版"意味着该工具箱是与MATLAB R2019a版本...
"从零开始一起学习SLAM - 用四元数插值来对齐IMU和图像帧.pdf"和"写个想从事自动驾驶相关工作的同学及学习资料获取2.pdf"这两份文档很可能是详细教程,涵盖了SLAM的基础概念、四元数理论以及如何在实践中应用这些...
在MATLAB中,从四元数到欧拉角的转换可以使用`quat2eul`函数,它需要指定旋转顺序,因为不同的旋转顺序会得到不同的欧拉角结果。 7. **欧拉角到四元数的转换**:相反的过程,可以使用`eul2quat`函数,同样需要指定...
9. **Android OpenGL ES环境设置**: 在Android应用中,我们需要初始化OpenGL ES上下文,并设置SurfaceView来显示图形。同时,还需要创建一个GLSurfaceView.Renderer,实现onSurfaceCreated()、onSurfaceChanged()...