有人可以解释一下为什么我的代码中的相机会在每次onIdle回调中移动吗?我没有改变任何参数,所以在我看来它应该一直显示相同。仍然无法自己解决,谢谢你的帮助
#include <iostream>
#include <math.h>
#include "gl/glut.h"
#include <windows.h>
using namespace std;
void Display(void){
glMatrixMode(GL_PROJECTION);
glFrustum(-0.5, 0.5, -0.5, 0.5, 0.8, 2);
gluLookAt (0,0,1, 0,0,0, 0,1,1);
glMatrixMode(GL_MODELVIEW);
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
glutWireCube(0.2);
glFlush();
}
void onIdle(void){
Sleep(1000);
glutPostRedisplay();
}
int main(void){
glutInitDisplayMode(GLUT_DEPTH | GLUT_RGBA);
glEnable(GL_DEPTH_TEST);
glutCreateWindow("camera");
glutDisplayFunc(Display);
glutIdleFunc(onIdle);
glutMainLoop();
return 0;
}
答案 0 :(得分:0)
这是因为您不会在每次渲染后或每次渲染开始时重置矩阵。
基本上,您需要调用glLoadIdentity();
来重置当前选定的矩阵,但将矩阵的值设置为默认值(Matrix Identity)。