我想知道是否可以擦除OpenGL中任何图形的部分?假设我用鼠标绘制了两条线,这些线在某些点重叠。
是否可以只删除一行?是否有或多或少的简单方法?
答案 0 :(得分:8)
OpenGL不存储您绘制的内容。如果在OpenGL中绘制一条线,则OpenGL将采用该线,对其执行各种数学运算,并将像素写入构成线条形状的帧缓冲区。 OpenGL不记得你画了一条线;所有OpenGL都能做到的是向帧缓冲区写入像素。
一般的想法是,OpenGL的用户要记住他们画的是什么。因此,如果你绘制两条线,你应该记住你为这两条线给出的坐标。因此,如果你想“擦除”一行,你所做的就是清除屏幕并重新绘制除之外的所有内容。
这并不像听起来那么愚蠢。许多OpenGL应用程序不断重绘屏幕。它们显示一个框架,绘制一个新框架,然后显示该框架等。这为动画提供了可能性:更改绘制的内容以及从一帧到另一帧绘制的位置。这造成了运动的幻觉。
答案 1 :(得分:0)
如果我理解正确的话,有两种方法。
只重绘您需要的元素,每个元素必须有一个布尔值,表明它是否会被绘制。
如果您需要清除窗口的一部分,请使用glScissor。
的信息:
现在换新的东西。一个很棒的GL命令叫做glScissor(x,y,w,h)。这个命令的作用几乎创造了你所谓的窗口。启用GL_SCISSOR_TEST后,您可以更改的屏幕的唯一部分是剪刀窗口内的部分。
答案 2 :(得分:0)
您需要清除缓冲区并重绘所需的行。为此,您可能需要将行数据存储在某种结构中。
答案 3 :(得分:0)
您可以将glLogicOp与GL_XOR
一起使用,然后重新删除该行以将其删除。但这不是一般解决方案。
答案 4 :(得分:0)
您可以尝试使用模板缓冲技术。参见关于阴影体积的J. Carmack技术(反模板或其他东西)。