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

10-11 23:03