2012-12-01 121 views
3

我開始混淆數學。旋轉到opengl中的給定方向

我想進行旋轉,將y軸的方向轉換爲給定方向。

所以我想做一個函數,它有一個輸入方向,並調用glRotatef()。在我繪製的任何功能之後,應該指向給定的方向而不是向上。

glRotatef具有4個參數:角,X,Y,Z

+0

如果你迷惑*數學*本身,這是一個成就......無論如何,你的問題是非常具體。所以不會爲你學習OpenGL和數學,對不起。得到一個教程,並通過它。 –

回答

2

基本上,要與一個(單位長度)方向d對準世界y軸線。爲了用glRotatef組成一個旋轉矩陣,需要一個軸a = [a_x, a_y, a_z]和一個角度omega

即需要yd的旋轉軸是垂直於yd,從而可以通過矢量叉積來計算:

a = cross(y, d); 

旋轉omega的角度僅僅是矢量y之間的角度和d,因此可以從點積計算得出:

omega = acos(dot(y, d)); 

現在你可以bui LD與旋轉矩陣:

glRotatef(omega, a_x, a_y, a_z); 

要小心,omega需要在度和不弧度。同時檢查旋轉方向。

+0

謝謝!但是如果d = Vector(0,-1,0)(指向與y軸相反的方向),叉積非常奇怪。我應該專門檢查一下嗎? – SoonDead

+0

是的,在這種情況下,您應該在'xz'平面上選擇任意單位矢量,例如x軸。 – mrucci