2010-05-20 138 views
4

我想要的,而不是使用gluLookAt計算LOOKAT矩陣自己,()。 我的問題是我的矩陣不起作用。然而,在gluLookAt上使用相同的參數仍然有效。gluLookAt替代不起作用

我創建LOOKAT矩陣的方式:

Vector3 Eye, At, Up; //these should be parameters =) 

Vector3 zaxis = At - Eye;   zaxis.Normalize(); 
Vector3 xaxis = Vector3::Cross(Up, zaxis); xaxis.Normalize(); 
Vector3 yaxis = Vector3::Cross(zaxis, xaxis); yaxis.Normalize(); 

float r[16] = 
{ 
    xaxis.x, yaxis.x, zaxis.x, 0, 
    xaxis.y, yaxis.y, zaxis.y, 0, 
    xaxis.z, yaxis.z, zaxis.z, 0, 
    0,   0,   0,   1, 
}; 
Matrix Rotation; 
memcpy(Rotation.values, r, sizeof(r)); 

float t[16] = 
{ 
    1,  0,  0,  0, 
    0,  1,  0,  0, 
    0,  0,  1,  0, 
    -Eye.x, -Eye.y, -Eye.z, 1, 
}; 
    Matrix Translation; 
    memcpy(Translation.values, t, sizeof(t)); 


View = Rotation * Translation; // i tried reversing this as well (translation*rotation) 

現在,當我嘗試使用這個矩陣來調用glMultMatrixf,什麼都沒有,顯示在我的引擎,而使用相同的眼睛,LOOKAT和最多值gluLookAt的作品完美,正如我之前所說的。

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glMultMatrixf(View); 

問題必須在我這裏張貼的代碼的某個地方,我知道這個問題是不是在我的Vector3 /矩陣類,因爲他們創建一個投影矩陣時正常工作。

+0

將「視圖」按照列主要順序正確存儲在傳遞給glMultMatrix()時? (從上glMultMatrix()OpenGL的文檔注:「這不同於標準行主C訂購爲矩陣元素」。) – TreDubZedd 2010-05-20 16:49:04

+0

兩個矩陣我的代碼生成被存儲在相同的方式i中的結果傳遞給glMultMatrix() – Brammie 2010-05-20 17:32:18

回答

3

我假設你有右旋座標系的權利(這是默認在OpenGL)。 請嘗試下面的代碼。我認爲你忘了正常化,你必須把「-zaxis」放在矩陣中。

Vector3 Eye, At, Up; //these should be parameters =) 

Vector3 zaxis = At - Eye; zaxis.Normalize(); 
Up.Normalize(); 
Vector3 xaxis = Vector3::Cross(Up, zaxis); xaxis.Normalize(); 
Vector3 yaxis = Vector3::Cross(zaxis, xaxis); yaxis.Normalize(); 

float r[16] = 
{ 
    xaxis.x, yaxis.x, -zaxis.x, 0, 
    xaxis.y, yaxis.y, -zaxis.y, 0, 
    xaxis.z, yaxis.z, -zaxis.z, 0, 
    0,   0,   0,   1, 
}; 
+0

這是一個恥辱,我從來沒有在這裏工作時返回。事實證明,我在Vector3的構造函數中遇到了一些問題。 這工作得很好,我甚至用它在別的地方。 :) – Brammie 2011-02-14 21:19:26