OpenGL只绘制一瞬间
我试图在OpenGL中绘制一个模型,每次我按下Q,但一旦我放开Q,模型就消失了。如果我一直按Q,模型会一次又一次地绘制,我希望模型保持在那里 代码如下:OpenGL只绘制一瞬间,opengl,Opengl,我试图在OpenGL中绘制一个模型,每次我按下Q,但一旦我放开Q,模型就消失了。如果我一直按Q,模型会一次又一次地绘制,我希望模型保持在那里 代码如下: glPushMatrix(); glTranslatef(modelo.objecto.pos.x, modelo.objecto.pos.y, modelo.objecto.pos.z); //glRotatef(-90, 1, 0, 0); //glRotatef(-90, 0, 0, 1); glScale
glPushMatrix();
glTranslatef(modelo.objecto.pos.x, modelo.objecto.pos.y, modelo.objecto.pos.z);
//glRotatef(-90, 1, 0, 0);
//glRotatef(-90, 0, 0, 1);
glScalef(SCALE_BATMAN + 0.005, SCALE_BATMAN + 0.005, SCALE_BATMAN + 0.005);
mdlviewer_display(obsModel[JANELA_NAVIGATE][5]);
glPopMatrix();
glutSwapBuffers();
obsModel
是一个StudioModel对象JANELA_NAVIGATE
是我要将图形放入的窗口[5]
是我想画的模型
我遗漏了什么吗?您对问题的措辞听起来像是在键盘事件处理程序中执行OpenGL绘图操作。如果是这样,那就是你的问题
一般来说,事件处理程序只应设置一个状态变量并设置一个标志,以便在应用程序循环的下一次迭代中执行重画。您的渲染需要在常量循环中进行。您的权利,我添加了一个标志。但是,图形仅在我按下键时显示,这意味着它仅在标志为真时才显示。当我按下键时,我看到标志是否为假,如果为假,那么我将其设置为真。在draw方法中,我检查标志是否为true,如果为true,我调用drawModel方法,然后将标志设置为false。@AdamSilva:嗯,您的应用程序在事件循环中运行,事件循环结束时的通常操作是重绘窗口。因此,当您在绘图的和处清除标志时,下一个不可避免的循环迭代将在没有对象的情况下重新绘制。解决方案:不要清除绘图代码中的标志。很好,这是绘图。你能证实一件事吗?每次按下按钮,我都想画一个弹丸(像子弹一样)。子弹只有在击中某物时才会被摧毁。当它击中某物后,如果我把旗子打错,子弹就会消失,对吗?@AdamSilva:这是一般的想法。请记住,OpenGL只是一个绘图API。它不保留一些“场景信息”。它将点、线或三角形放入帧缓冲区的像素中,并忘记它刚才做了什么。因此,程序员的职责是保存所有重要信息。