我正在尝试使用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;
}
我在这里做错了什么?
答案 0 :(得分:0)
我在这里做错了什么?
您将它放在init函数中。那是错的。
OpenGL是一个状态机,根据程序中的其他内容,可能会改变状态,以后会引起你的兴趣。例如,您或某些库(意外地)清除模型视图矩阵(或投影矩阵或其他内容)。
作为OpenGL的一般规则,除少数异常值外,所有函数调用前缀 gl ... 和 glu ... 应该进入绘图代码,因为它是绘图代码。其中包括像 glViewport 这样的东西以及其他一些天真的可能在“初始化代码”中解释的东西。