[英]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.