Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL只绘制一瞬间_Opengl - Fatal编程技术网

OpenGL只绘制一瞬间

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

我试图在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);
    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。它不保留一些“场景信息”。它将点、线或三角形放入帧缓冲区的像素中,并忘记它刚才做了什么。因此,程序员的职责是保存所有重要信息。