有人可以解释HLSL中函数Tex2D背后的数学吗?
其中一个例子是:给定一个带有4个顶点的四边形,纹理坐标为(0,0)(0,1)(1,0)(1,1),纹理的宽度和高度为640和着色器如何确定要执行的采样次数?如果要将纹素直接映射到像素,是否意味着着色器需要执行640 * 480次采样,纹理坐标在某种渐变中增加?另外,如果您能提供有关此主题的更多参考资料和文章,我将不胜感激。
感谢。
答案 0 :(得分:1)
在顶点着色器之后,光栅化器将三角形“转换”为像素。每个像素与屏幕位置相关联,并且三角形的顶点属性(例如:纹理坐标)在三角形内插,并且根据像素位置将插值存储在每个像素中。
像素着色器每像素运行一次(在大多数情况下)。
每个像素采样纹理的次数取决于使用的采样器。如果使用点采样器,纹理将被采样一次,如果使用双线性采样器则采样4次,如果使用更复杂的采样器则采样更多。
因此,如果您正在绘制全屏四边形,则您采样的纹理与渲染目标的大小相同,并且您使用点采样器,纹理将采样宽度*高度倍(每个像素一次)。
您可以将纹理视为纹素的二维数组。 tex2D 只是在请求的位置返回纹素,执行某种插值取决于所使用的采样器(纹理坐标通常相对于纹理大小,因此硬件会将它们转换为绝对坐标)。
此链接可能有用:Rasterization