OpenGL共面曲面

时间:2011-11-21 15:49:14

标签: opengl

在我的OpenGL问题集中,我绘制了一个特定的多边形,并且通过鼠标选择,我想从我选择的位置绘制一个正方形。随着鼠标移动的变化,绘制的方块会快速更新,最后应该贴在我释放鼠标按钮的终点。

在我的鼠标运动例程中,我尝试执行glClear(GL_COLOR_BUFFER_BIT);并调用我编写的drawSquare函数。 glClear确保我只绘制了一个独特的方形,而不是先前图像的斑点。但是,这个清除也清除了我绘制的初始多边形。

请告知如何确保我在现有多边形的顶部有这个新方块(来自鼠标)。

P.S:我尝试在后备缓冲区和前面的方块上绘制底层多边形,但glutSwapBuffers()造成了破坏。

1 个答案:

答案 0 :(得分:4)

与许多其他人一样,您似乎将OpenGL误认为场景管理API,这是完全错误的。 OpenGL除了在屏幕上绘制内容之外别无其他。在绘制完OpenGL之后,完全忘记了多边形。所以这意味着,你必须绘制每一帧你想要显示的所有内容(通常在清除帧缓冲区之后)。

清除帧缓冲区,绘制多边形并绘制正方形。一旦方形位置(或其他任何东西)发生变化,再次清除帧缓冲区,绘制多边形并绘制正方形。这就是它的工作方式。

当然,你当然也不应该在鼠标例程中画任何东西,不要打电话给glClear,这会导致你遇到的那种垃圾。而是更新场景并请求窗口重绘自身,然后在显示方法中绘制整个场景:

mouseFunc()
{
    updateSquare();
    glutPostRedisplay();
}


displayFunc()
{
    glClear(...);
    drawPolygon();
    drawSquare();
    glutSwapBuffers();
}

当然,在使用双缓冲时,请务必不要使用前缓冲区。