我正在开发一个简单的OpenGL项目。 我想让一个简单的相机以透视模式移动。
我继续阅读投影矩阵,gluLookAt和模型视图矩阵。我一直在阅读我应该做的就是在投影矩阵中进行透视调用,然后在模型视图矩阵中进行所有变换和相机移动。
array([20, 30, 40, 50, 30, 40, 50, 60, 40, 50, 60, 70])
我希望这段代码显示三行代表世界坐标系的sx,y和z轴,当按下按键时,摄像机应该移动并开始从更多的位置查看原点/坐标轴。更激烈的角度。
这里出了什么问题?我一直在砸墙,试图弄清楚为什么没有动静。它只会改变,如果我把gluLookAt调用放在投影矩阵中,我一直被告知是一个糟糕的主意。
答案 0 :(得分:2)
在设置lookAt矩阵之前绘制坐标交叉,因此矩阵无效。
您必须更改顺序,以便在绘制时矩阵已存在:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(eye[0], eye[1], eye[2], 0, 0, 0, 0, 1, 0);
drawWorldAxis();
printf("eye at <%f, %f, %f>\n", eye[0], eye[1], eye[2]);
fflush(stdout);
然后还有第二个问题:您正在drawWorldAxis
的第一行重置模型矩阵。在这里,您可以删除glLoadIdentity
调用或先将前一个矩阵推送到堆栈:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(eye[0], eye[1], eye[2], 0, 0, 0, 0, 1, 0);
glPushMatrix();
drawWorldAxis();
glPopMatrix();
printf("eye at <%f, %f, %f>\n", eye[0], eye[1], eye[2]);
fflush(stdout);
答案 1 :(得分:0)
感谢@BDL帮助解决这个问题!这是我想要的正确代码
I