c++ - 在 OpenGL 中撕裂?

标签 c++ opengl winapi

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

相关文章:

c++ - 如何在完成其他一些任务后在 CTOR 中初始化对象?

c++ - 在 Geany 中使用 OpenGL 时获取 undefined reference

c++ - 在OpenGL/GLSL 4.3中读取和更新纹理缓冲区

c++ - 使用 GL Load 时未声明 GLenum 和 GLint

C++11 lambda 返回引用

c++ - 将负数存储在无符号整数中

使用 Win32 API 连接字符串

winapi - Win32 大对齐内存分配

windows - 在定义的时间内等待窗口消息

c++ - 如何在cmake中动态设置目标库?