gpt4 book ai didi

c++ - gluLookAt 替代方案不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:03 26 4
gpt4 key购买 nike

我尝试自己计算观察矩阵,而不是使用 gluLookAt()。我的问题是我的矩阵不起作用。然而,在 gluLookAt 上使用相同的参数确实有效。

我创建观察矩阵的方法:

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 上使用相同的眼睛、注视和向上值时效果如我之前所说的那样完美。

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,
};

关于c++ - gluLookAt 替代方案不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2875872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com