我正在使用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();
Run Code Online (Sandbox Code Playgroud)
这是我的渲染函数,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);
Run Code Online (Sandbox Code Playgroud)
无论渲染功能运行的频率如何,都会出现相同的撕裂问题.我有什么问题或错过了吗?
如果你只是渲染一个或两个trianges,你将会有一个疯狂的高帧率(可能是成千上万的FPS),这意味着它是像地狱一样的SwapBuffering,这意味着你可能总是在屏幕刷新期间交换(即使有双缓冲).一旦你的场景进入更多内容并且帧速率降到更逼真的值,它应该停止撕裂.或者,查看启用V-Sync,例如wglSwapIntervalEXT在Windows上.
| 归档时间: |
|
| 查看次数: |
3470 次 |
| 最近记录: |