0

有没有办法获取 FBO 像素数据,然后:快速对其进行灰度化并再次将图像取回该 FBO?

4

1 回答 1

1

如果您使用的是固定功能管道 (ES 1.1),则可以使用glReadPixels从 GPU 中提取像素数据,以便直接处理它。然后,您需要根据该结果创建一个纹理,并渲染一个映射到新纹理的四边形。但这是实现结果的一种相当低效的方式。

如果您使用着色器 (ES 2.0),您可以直接在 GPU 上执行此操作,这样更快。这意味着通过以下几种方式之一在片段着色器中进行灰度化:

  1. 如果你的渲染很容易开始,你可以在你的普通片段着色器中添加灰度数学,也许可以用一个布尔统一变量来切换它。

  2. 如果您不想在正常管道中弄乱灰度,则可以正常渲染到屏幕外 FBO(纹理),然后使用特殊的灰度纹理着色器将该纹理的内容渲染到屏幕的 FBO 上进行数学运算采样的纹素。

如果需要,这里是灰度数学:https ://web.archive.org/web/20141230145627/http://bobpowell.net/grayscale.aspx本质上,将 RGB 值插入该公式,并使用生成的亮度值在您的所有频道中。

于 2012-08-02T07:20:12.260 回答