我正在尝试使用GLUT显示带有鼠标旋转的茶壶
如果将gluLookAt放在display函数中,则会渲染茶壶
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();
}但是如果我把它放在我的init函数中,茶壶就消失了
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;
}我在这里做错了什么?
发布于 2016-03-13 20:53:50
,我做错了什么?
您将它放在init函数中。这就是问题所在。
OpenGL是一个状态机,依赖于您的程序中的其他内容,可能会以某种方式改变状态,这将在以后使您陷入困境。例如,您或某个库(意外地)清除了模型视图矩阵(或投影矩阵或其他东西)。
作为OpenGL的一般规则(少数异常值除外),所有函数都会调用前缀为gl…的函数和glu…应该进入绘图代码,因为它是绘图代码。这包括像glViewport这样的东西,以及人们可能在“初始化代码”中天真地解释的其他东西。
https://stackoverflow.com/questions/35969949
复制相似问题