我使用的是win32和opengl,并且在窗口坐标glOrtho上设置了一个投影窗口。我启用了双重缓冲,并使用glGet对其进行了测试。如果我的程序不断地被翻译,它似乎总是会撕碎我尝试使用的任何原语。
这是我的OpenGL初始化函数:
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glViewport(0, 0, 640, 480);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 640, 0, 480, 0, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glDrawBuffer(GL_BACK);
glLoadIdentity();
这是我的渲染函数,gMouseX和gMouseY是鼠标的坐标:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glTranslatef(gMouseX, gMouseY, 0.0f);
glColor3f(0.5f, 0.5f, 0.5f);
glBegin(GL_TRIANGLES);
glVertex2f(0.0f, 128.0f);
glVertex2f(128.0f, 0.0f);
glVertex2f(0.0f, 0.0f);
glEnd();
SwapBuffers(hDC);
无论渲染函数运行的频率如何,都会发生相同的撕裂问题。我在这里做错了什么或想念什么吗?
最佳答案
如果您仅渲染一个或两个三角形,您将拥有极高的帧速率(可能在数千FPS中),这意味着SwapBuffering像 hell 一样,这意味着您可能总是在屏幕刷新期间进行交换(即使启用了双重缓冲)。一旦场景中包含更多内容并且帧速率降至更逼真的值,它就应该停止撕裂。或者,查看启用V-Sync,例如在Windows上使用wglSwapIntervalEXT
。
关于c++ - 在OpenGL中撕裂?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2656531/