Opengl es Opengl es 1.1更改FBO上的像素数据
有没有一种方法可以获取FBO像素数据,然后:快速进行灰度缩放并将图像恢复到该FBO?如果使用固定功能管道(ES 1.1),可以使用Opengl es Opengl es 1.1更改FBO上的像素数据,opengl-es,fbo,Opengl Es,Fbo,有没有一种方法可以获取FBO像素数据,然后:快速进行灰度缩放并将图像恢复到该FBO?如果使用固定功能管道(ES 1.1),可以使用glReadPixels从GPU中提取像素数据,以便直接处理它。然后需要根据该结果创建纹理,并渲染映射到新纹理的四边形。但这是一种相当低效的实现结果的方式 如果您使用着色器(ES 2.0),则可以直接在GPU上执行此操作,速度更快。这意味着可以通过以下几种方式之一在片段着色器中执行灰度缩放: 如果渲染一开始很简单,则可以在法线片段着色器中添加灰度数学,并可能使用布尔统
glReadPixels
从GPU中提取像素数据,以便直接处理它。然后需要根据该结果创建纹理,并渲染映射到新纹理的四边形。但这是一种相当低效的实现结果的方式
如果您使用着色器(ES 2.0),则可以直接在GPU上执行此操作,速度更快。这意味着可以通过以下几种方式之一在片段着色器中执行灰度缩放:
如果需要,这里是灰度数学:基本上,将RGB值插入该公式,并在所有通道中使用得到的亮度值。谢谢,但glReadPixels不是一个选项,因为它非常缓慢和滞后(还有其他固定管道吗?@lacas:如果没有着色器,唯一的其他方法是从灰度开始实际渲染屏幕。您可能需要问一个单独的问题,并提供有关场景的更多细节(2d?3d?照明?等)为了得到关于如何实现这一点的精明答案,但理论上你可以调整你所有的颜色,这样你只能用灰色来着色。