着色器是否可以查询纹理读取中像素块的总和/平均值,而不是查找单个值?我在 Cg 工作,但欢迎提供任何示例和搜索词。
我特别指的是内置方式,而不是在我的着色器中手动循环。
并不真地。
您能做的最好的事情是ARB_texture_gather 扩展(GL 4.0+ 中的核心)/ D3D10.1 的收集功能。
这允许您从 2x2 纹素块中获取,但您一次只能获取该纹理的一个组件。此外,纯扩展/D3D10.1 版本只能获取纹理的红色分量。GL 4.0/D3D11.0 版本可以获取四个组件中的任何一个,但每次调用只会获取一个。
当然,你必须自己做 2x2 块的平均。
唯一真正可行的选择是按照 Lyth 所说的去做:为您的纹理生成 mipmap 并从中采样。纹理访问函数可以从特定的 mipmap 中获取,该 mipmap 表示特定范围像素的平均值。当然,这些也是有限的。