Glut glLoadMatrixf 相机等效项
题
在我的过剩应用程序中,我正在用相机模拟飞机。当飞机速度较低时,我打算在相机下落时让机头开始指向地面。我的第一直觉是改变 沥青 直到它指向下方-90度。然而,我不能仅仅改变俯仰角,因为如果飞机侧向或颠倒倾斜,那么它会注意到朝向地面的方向正在改变。
现在我试图通过向下移动“lookAt.y”来对此进行粗略模拟。为此,我正在尝试获取用于设置相机的所有当前相机坐标 (eye.x、eye.y、eye.z、look.x、look.y、look.z、up.x、up.y、up.z)。然后调用具有新修改值的集合。
我一直在使用 Camera.cpp 和 Camera.h 来控制我的相机功能。他们可以找到 这里
添加方法来获取所有值后,当进行各种相机运动时,实际上只有眼睛值被更新。我想我的问题是如何检索这些值。
glLoadMaxtrix 调用在此函数中
void Camera :: setModelViewMatrix(void)
{ // load model view matrix with existing camera values
float m[16];
Vector3 eVec(eye.x, eye.y, eye.z);
m[0] = u.x; m[4] = u.y; m[8] = u.z; m[12] = -eVec.dot(u);
m[1] = v.x; m[5] = v.y; m[9] = v.z; m[13] = -eVec.dot(v);
m[2] = n.x; m[6] = n.y; m[10] = n.z; m[14] = -eVec.dot(n);
m[3] = 0; m[7] = 0; m[11] = 0; m[15] = 1.0;
look.x = u.y; look.y = v.y; look.z = n.y;
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(m);
}
有没有办法从这里的矩阵中获取“eye”、“lookAt”和“up”值?或者我应该做其他事情来获得这些值?
-在此先感谢您的帮助
解决方案
您链接到的相机类不是实际的 OpenGL 类,但它应该足够简单以便使用。
引用的函数只是获取相机对象的当前值并将它们发送到 OpenGL。如果您查看相机的设置函数,您可以看到程序如何计算它实际存储的值。
直接存储眼值。通过向量数学计算,lookAt 值就是 (eye - n) 的值。up 值是最难的,但如果我正确地记得我的向量数学,我相信 up = (n cross u)。
不隶属于 StackOverflow