清除OpenGL中的图形部分
Erase parts of drawings in OpenGL
我想知道是否可以在OpenGL中擦除任何图形的部分?假设我用鼠标画了两条线,这些线在某些点上重叠。
可以只擦除一行吗?有没有一种或多或少简单的方法?
一般的想法是,OpenGL的用户可以记住他们画的东西。所以如果你画两条线,你应该记住你给这两条线的坐标。因此,如果你想"擦除"一行,你要做的就是清除屏幕并重新绘制除该行之外的所有。
这并不像听起来那么愚蠢。许多OpenGL应用程序不断地重新绘制屏幕。它们显示一个帧,绘制一个新帧,然后显示该帧,等等。这为动画提供了可能性:从一帧到另一帧更改绘制内容和绘制位置。这就产生了运动的错觉。
您可以将glLogicOp与GL_XOR
一起使用,然后重新绘制线条以将其擦除。这不是一个通用的解决方案,但它非常适合传统使用的字幕选择或鼠标工具覆盖。请注意,您需要使用单个缓冲区,或者在后缓冲区和前缓冲区之间进行复制,而不是交换它们。
如果我理解正确的话,有两个问题。
只重新绘制所需的元素,每个元素都必须有一个布尔值,指示是否要绘制。
如果您需要擦除窗口的一部分,请使用glScissor。
信息:
现在来点新东西。一个奇妙的GL命令,叫做glScissor(x,y,w,h)。这个命令所做的是创建一个几乎可以称之为窗口的东西。启用GL_SCISSOR_TEST时,屏幕上唯一可以更改的部分是剪刀式窗口内的部分。
您需要清除缓冲区并重新绘制所需的行。为此,您可能需要将行数据存储在某种结构中。
您可以尝试模具缓冲区技术。参见J.Carmack关于阴影体积的技术(反向模板或其他东西)。
相关文章:
- 如何在窗口外绘制图形(OpenGL GLFW)
- 将 OpenGL 实例化图形与移动对象一起使用
- 使用 OpenGL 使用 C++ 以图形方式表示堆积条形图
- 如何在OpenGL或Win32中获取图形卡模型名称
- 创建像OpenGL这样的图形库
- 用于将三维模型导入OpenGL/C++项目的推荐文件格式和图形库
- 具有两个OpenGL图形视图的MFC MDI拆分器无法工作
- 定向图形以使用 OpenGL 查看相机
- 使用OpenGL渲染的立方体在集成图形上获得更高的帧速率
- 如何在 3D 图形 OpenGL 中使用纹理
- OpenGL代码显示人体图形,从二进制文件中读取顶点
- 使用OpenGL ES为图形引擎编写动态着色器管道
- 在opengl中处理三维或二维图形的点击
- 用VBO绘制OpenGL图形
- Linux基础图形编程,不含OpenGL
- 移动设备上的OpenGL矢量图形渲染性能
- 添加纹理到QT OpenGL场景图形
- 我如何确定为什么OpenGL入口点丢失后更新我的图形驱动程序
- 如何在OpenGL/c++中拖动窗口周围的图形
- 为什么图形管道如此专业化?(OpenGL)