HLSL中Tex2D背后的数学

时间:2013-07-25 15:55:10

标签: directx shader textures hlsl pixel-shader

有人可以解释HLSL中函数Tex2D背后的数学吗?

其中一个例子是:给定一个带有4个顶点的四边形,纹理坐标为(0,0)(0,1)(1,0)(1,1),纹理的宽度和高度为640和着色器如何确定要执行的采样次数?如果要将纹素直接映射到像素,是否意味着着色器需要执行640 * 480次采样,纹理坐标在某种渐变中增加?另外,如果您能提供有关此主题的更多参考资料和文章,我将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:1)

在顶点着色器之后,光栅化器将三角形“转换”为像素。每个像素与屏幕位置相关联,并且三角形的顶点属性(例如:纹理坐标)在三角形内插,并且根据像素位置将插值存储在每个像素中。

像素着色器每像素运行一次(在大多数情况下)。

每个像素采样纹理的次数取决于使用的采样器。如果使用点采样器,纹理将被采样一次,如果使用双线性采样器则采样4次,如果使用更复杂的采样器则采样更多。

因此,如果您正在绘制全屏四边形,则您采样的纹理与渲染目标的大小相同,并且您使用点采样器,纹理将采样宽度*高度倍(每个像素一次)。

您可以将纹理视为纹素的二维数组。 tex2D 只是在请求的位置返回纹素,执行某种插值取决于所使用的采样器(纹理坐标通常相对于纹理大小,因此硬件会将它们转换为绝对坐标)。

此链接可能有用:Rasterization