簡體   English   中英

gluLookAt替代方案不起作用

[英]gluLookAt alternative doesn't work

我正在嘗試自己計算一個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時,我的引擎中沒有顯示任何內容,而使用相同的眼睛,gluLookAt上的lookat和up值就像我之前說的那樣完美。

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

問題必須在我發布的代碼中的某個地方,我知道問題不在我的Vector3 / Matrix類中,因為它們在創建投影矩陣時工作正常。

我假設你有一個右手坐標系(它在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,
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM