需要帮助在OpenGL中移动相机

时间:2015-11-01 23:54:26

标签: c++ opengl matrix camera

我正在开发一个简单的OpenGL项目。 我想让一个简单的相机以透视模式移动。

我继续阅读投影矩阵,gluLookAt和模型视图矩阵。我一直在阅读我应该做的就是在投影矩阵中进行透视调用,然后在模型视图矩阵中进行所有变换和相机移动。

array([20, 30, 40, 50, 30, 40, 50, 60, 40, 50, 60, 70])

我希望这段代码显示三行代表世界坐标系的sx,y和z轴,当按下按键时,摄像机应该移动并开始从更多的位置查看原点/坐标轴。更激烈的角度。

这里出了什么问题?我一直在砸墙,试图弄清楚为什么没有动静。它只会改变,如果我把gluLookAt调用放在投影矩阵中,我一直被告知是一个糟糕的主意。

2 个答案:

答案 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