gluLookAt外显示功能

时间:2016-03-13 12:00:50

标签: opengl camera

我正在尝试使用GLUT显示带有鼠标旋转的茶壶

如果将gluLookAt放置在显示功能中,茶壶会被渲染

void displayPot()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

gluLookAt(              // set up the camera
    0.0, 0.0, 5.0,      // eye position
    0.0, 0.0, 0.0,      // lookat position
    0.0, 1.0, 0.0);     // up direction

glRotatef(xrot, 1.0f, 0.0f, 0.0f);
glRotatef(yrot, 0.0f, 1.0f, 0.0f);

glEnable(GL_COLOR_MATERIAL);    // specify object color
glColor3f(1.0, 0.1, 0.1);       // redish
glutSolidTeapot(1);

glFlush();
glutSwapBuffers();
}

但如果我将它放在我的初始化功能中,茶壶就会消失

bool init()
{
glClearColor(0.93f, 0.93f, 0.93f, 0.0f);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, 1, 1, 100);  // setup a perspective projection

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

gluLookAt(              // set up the camera
    0.0, 0.0, 5.0,      // eye position
    0.0, 0.0, 0.0,      // lookat position
    0.0, 1.0, 0.0);     // up direction

glEnable(GL_LIGHTING);      // enable lighting
glEnable(GL_LIGHT0);        // enable

float lpos[] = { 5, 5, 5, 0 };
glLightfv(GL_LIGHT0, GL_POSITION, lpos);

//glShadeModel(GL_FLAT);        // flat shading
glShadeModel(GL_SMOOTH);        // smooth shading

glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glClearDepth(1.0f);

return true;
}

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

  

我在这里做错了什么?

您将它放在init函数中。那是错的。

OpenGL是一个状态机,根据程序中的其他内容,可能会改变状态,以后会引起你的兴趣。例如,您或某些库(意外地)清除模型视图矩阵(或投影矩阵或其他内容)。

作为OpenGL的一般规则,除少数异常值外,所有函数调用前缀 gl ... glu ... 应该进入绘图代码,因为它是绘图代码。其中包括像 glViewport 这样的东西以及其他一些天真的可能在“初始化代码”中解释的东西。