0

有人可以解释一下为什么我的代码中的相机会在每个 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;
}
4

1 回答 1

1

这是因为您不会在每次渲染后或每次渲染开始时重置矩阵。

基本上,您需要调用glLoadIdentity();它将重置当前选定的矩阵,但将矩阵的值设置为默认值(矩阵标识)。

于 2013-10-11T00:30:12.557 回答