【问题标题】:What exactly is a buffer in OpenGL, and how can I use multiple ones to my advantage?OpenGL 中的缓冲区到底是什么,如何使用多个缓冲区来发挥我的优势?
【发布时间】:2012-10-04 23:09:58
【问题描述】:

不久前,我试用了 OpenGL 指南中的一个程序,据说是双缓冲的;它在屏幕上显示了一个旋转的矩形。不幸的是,我已经没有这本书了,而且我还没有找到一个清晰、直接的关于缓冲区的定义。我的猜测是它是一个绘制东西的“地方”,使用很多就像分层一样?

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

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

【问题讨论】:

    标签: c++ opengl graphics buffer polygon


    【解决方案1】:

    OpenGL 确实知道多种缓冲区:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-12
      • 2018-11-06
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多