2010-07-06 48 views
0

D3DXMatrixRotationYawPitchRoll()函數用指定的偏航,俯仰和滾轉建立矩陣。是否有一個iphone開發者的等價函數?iphone開發者有沒有相當於D3DXMatrixRotationYawPitchRoll()的?

我發現繪製一條蜿蜒小路或過山車here.

一個美麗的小樣本項目這不是大量的代碼,這些註釋似乎大多是可以理解的,但代碼是依靠少數的DirectX函數I」 m還不夠聰明,可以在C中重新創建,供我的iphone項目使用。

有人能指出我在正確的方向嗎?我需要根據偏航,俯仰,滾轉值創建一個旋轉矩陣。

此的DirectX函數簽名是這樣的:

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

是否有穀氨酸*()等效嗎?


(...小時的閱讀後)


好了,相當多的閱讀(具有非常多了去了)後,這是我收集:

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 ] 
+0

您不需要爲此使用四元數。只需爲軸建立三個旋轉矩陣並乘以它們即可。 – 2010-07-06 19:01:31

+0

如果沒有四元數,那麼就不會有靈活鎖定的可能性嗎? (我仍然試圖建立一些這裏發生的事情的心理圖像) – user360092 2010-07-07 14:15:55

+0

不,如果你每次都從三個角度重建矩陣,那麼沒有。 – 2010-07-08 02:18:43

回答