OpenGL中的缓冲区究竟是什么?如何使用多个缓冲区来发挥优势



不久前,我试用了OpenGL指南中的一个据说是双缓冲的程序;它在屏幕上显示了一个旋转的矩形。不幸的是,我已经没有这本书了,我也没有找到一个清晰、直接的缓冲区定义。我的猜测是,这是一个画东西的"地方",在那里大量使用可能就像分层一样?

如果是这样的话,我想知道我是否可以在多边形剪裁程序中使用多个缓冲区。我有一个很好的小窗口,允许用户在屏幕上绘制多边形,还有一个工具可以在多边形上拖动和绘制选择框。当用户绘制了选择矩形并放开鼠标时,多边形将基于矩形边界进行剪裁。

这是可行的,但我也希望用户能够重新开始:当按下转义键时,剪辑框应该消失,并且应该恢复原始多边形。由于我是逐像素处理的,因此似乎很难弄清楚如何将矩形像素的颜色改回黑色(如背景)或特定多边形的颜色,这取决于它们的绘制位置(除非我在绘制每个多边形像素时找到了保存颜色的方法,但这似乎太过分了)。我想知道给矩形自己的缓冲区是否有帮助,希望它能像一种透明层一样容易清除(?)缓冲区是这样使用的吗,还是我需要找到另一个解决方案?

OpenGL确实知道多种缓冲区:
  • Framebuffers:绘图操作指向的内存部分,用于更改缓冲区中的像素值。OpenGL默认具有屏幕缓冲区,可以分为前缓冲区和后缓冲区,其中绘图操作在后缓冲区上不可见,完成后会交换到前缓冲区。除此之外,OpenGL还使用深度缓冲区进行深度测试Z排序实现,模具缓冲区用于将渲染限制在帧缓冲区的裁剪(=模具)之类的选定部分。过去有辅助缓冲区和累积缓冲区。然而,这些已经被所谓的帧缓冲区对象所取代,帧缓冲区是用户创建的对象,将几个纹理或渲染缓冲区组合成可以渲染到的新帧缓冲区。

  • 渲染缓冲区:用户创建的渲染目标,将附加到帧缓冲区对象。

  • 缓冲区对象(顶点和像素):用户定义的数据存储。用于几何图形和图像数据。

  • 纹理:纹理是一种缓冲区,即它们保存数据,这些数据可以是绘图操作中的来源

OpenGL的常用方法是在发生变化时重新渲染整个场景。如果要保存这些绘制操作,可以将帧缓冲区的内容复制到一个纹理中,然后将该纹理绘制到一个四边形中,并使用选择的橡皮筋矩形对其进行过度绘制。

相关内容

  • 没有找到相关文章

最新更新