我使用的是 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/