OpenGL中的缓冲区究竟是什么,我如何才能使用多个缓冲区?

nic*_*ole 7 c++ opengl graphics buffer polygon

不久前,我尝试了一个据说是双缓冲的OpenGL指南的程序; 它在屏幕上显示一个旋转的矩形.不幸的是,我不再拥有这本书,而且我还没有找到一个清晰明确的缓冲区定义.我的猜测是它是一个绘制东西的"地方",使用很多可能就像分层?

如果是这种情况,我想知道我是否可以使用多个缓冲区来实现多边形裁剪程序.我有一个漂亮的小窗口,允许用户在屏幕上绘制多边形,还有一个实用程序,可以在多边形上拖动和绘制选择框.当用户绘制了选择矩形并放开鼠标时,将根据矩形边界剪切多边形.

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

dat*_*olf 9

OpenGL确实知道多种缓冲区:

  • 帧缓冲区:绘图操作指向的内存部分,用于更改缓冲区中的像素值.默认情况下,OpenGL具有屏幕缓冲区,可以将其拆分为前缓冲区和后缓冲区,其中绘制操作在后备缓冲区中不可见,并在完成时交换到前端.除了OpenGL使用深度缓冲区进行深度测试Z排序实现之外,还有一个模板缓冲区,用于将渲染限制为剪切(=模板),就像帧缓冲区的选定部分一样.曾经有辅助和累积缓冲区.然而,这些已经被所谓的帧缓冲对象取代,这些对象是用户创建的对象,将几个纹理或渲染缓冲区组合成可以渲染到的新帧缓冲区.

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

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

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

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