擦除OpenGL中的部分图形

时间:2011-06-16 09:01:53

标签: c++ opengl drawing erase

我想知道是否可以擦除OpenGL中任何图形的部分?假设我用鼠标绘制了两条线,这些线在某些点重叠。

是否可以只删除一行?是否有或多或少的简单方法?

5 个答案:

答案 0 :(得分:8)

OpenGL不存储您绘制的内容。如果在OpenGL中绘制一条线,则OpenGL将采用该线,对其执行各种数学运算,并将像素写入构成线条形状的帧缓冲区。 OpenGL不记得你画了一条线;所有OpenGL都能做到的是向帧缓冲区写入像素。

一般的想法是,OpenGL的用户要记住他们画的是什么。因此,如果你绘制两条线,你应该记住你为这两条线给出的坐标。因此,如果你想“擦除”一行,你所做的就是清除屏幕并重新绘制之外的所有内容。

这并不像听起来那么愚蠢。许多OpenGL应用程序不断重绘屏幕。它们显示一个框架,绘制一个新框架,然后显示该框架等。这为动画提供了可能性:更改绘制的内容以及从一帧到另一帧绘制的位置。这造成了运动的幻觉。

答案 1 :(得分:0)

如果我理解正确的话,有两种方法。

  1. 只重绘您需要的元素,每个元素必须有一个布尔值,表明它是否会被绘制。

  2. 如果您需要清除窗口的一部分,请使用glScissor。

  3. 的信息:

      

    现在换新的东西。一个很棒的GL命令叫做glScissor(x,y,w,h)。这个命令的作用几乎创造了你所谓的窗口。启用GL_SCISSOR_TEST后,您可以更改的屏幕的唯一部分是剪刀窗口内的部分。

答案 2 :(得分:0)

您需要清除缓冲区并重绘所需的行。为此,您可能需要将行数据存储在某种结构中。

答案 3 :(得分:0)

您可以将glLogicOpGL_XOR一起使用,然后重新删除该行以将其删除。但这不是一般解决方案。

答案 4 :(得分:0)

您可以尝试使用模板缓冲技术。参见关于阴影体积的J. Carmack技术(反模板或其他东西)。