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