着色器可以对纹理中的像素块/区域进行采样吗?

时间:2011-12-15 13:13:37

标签: 3d glsl hlsl shader cg

着色器是否可以查询纹理读取中像素块的总和/平均值,而不是查找单个值?我在Cg工作,但欢迎任何示例和搜索术语。

我特指的是内置方式,而不是在我的着色器中手动循环。

1 个答案:

答案 0 :(得分:4)

不是。

您可以做的最好的是ARB_texture_gather extension(GL 4.0 +中的核心)/ D3D10.1's gather function

这允许您从2x2的纹素块中获取,但是您一次只能获得该纹理的一个组件。此外,纯扩展/ D3D10.1版本只能 获取纹理的红色组件。 GL 4.0 / D3D11.0版本可以获取四个组件中的任何一个,但每次调用获取一个组件。

当然,您必须自己对2x2块进行平均。

唯一真正可行的选择是做Lyth所说的:为你的纹理和样本生成mipmap。纹理访问功能可以从特定的mipmap获取,该mipmap表示特定像素范围的平均值。当然,这些也是有限的。