对于iphone开发者来说,有相同的D3DXMatrixRotationYawPitchRoll()吗?

时间:2010-07-06 16:52:05

标签: iphone c opengl-es direct3d

D3DXMatrixRotationYawPitchRoll()函数构建一个具有指定偏航,俯仰和滚动的矩阵。是否有与iphone开发人员相同的功能?

我找到了一个漂亮的小样本项目,用于绘制蜿蜒的道路或过山车here.

这不是很多代码,评论看起来大部分都是可以理解的,但代码依赖于一些我还不够智能的DirectX函数,可以在C中重新创建,以便在我的iphone项目中使用。

有人能指出我在正确的方向吗?我需要根据偏航,俯仰,滚动值创建一个旋转矩阵。

这个directX函数签名是这样的:

     D3DXMATRIX * D3DXMatrixRotationYawPitchRoll(
  __inout  D3DXMATRIX *pOut,
  __in     FLOAT Yaw,
  __in     FLOAT Pitch,
  __in     FLOAT Roll
);

是否有相应的glu *()?


(...稍后阅读时间)


好吧,经过相当多的阅读(还有更多内容),这就是我收集的内容:

This网站是一个很好的帮助!

似乎我需要将3个欧拉角(即俯仰,滚转,偏航的角度)转换为三个独立的单位四元数:

Qx = [ cos(a/2), (sin(a/2), 0, 0)]
Qy = [ cos(b/2), (0, sin(b/2), 0)]
Qz = [ cos(c/2), (0, 0, sin(c/2))]

然后将这些组合成一个四元数:

Qcombined = Qx * Qy * Qz

然后我可以将这个结果“单位”四元数转换回openGL会喜欢的那种旋转矩阵:

Matrix =  [ 1 - 2y2 - 2z2    2xy - 2wz      2xz + 2wy
              2xy + 2wz    1 - 2x2 - 2z2    2yz - 2wx
              2xz - 2wy      2yz + 2wx    1 - 2x2 - 2y2 ]

1 个答案:

答案 0 :(得分:0)

在这里查看:http://en.wikipedia.org/wiki/Rotation_matrix#Three_dimensions

你应该创建一个由Rz(-roll)* Rx(-pitch)* Ry(yaw)组成的矩阵, 然后使用结果调用glMultMatrix(如果你有列mayor矩阵)或glMultTransposeMatrix(如果你有行 - 矩阵矩阵)足以设置视图。 http://www.opengl.org/sdk/docs/man/xhtml/glMultTransposeMatrix.xml http://www.opengl.org/sdk/docs/man/xhtml/glMultMatrix.xml