Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Directx HLSL中Tex2D背后的数学_Directx_Shader_Textures_Hlsl_Pixel Shader - Fatal编程技术网

Directx HLSL中Tex2D背后的数学

Directx HLSL中Tex2D背后的数学,directx,shader,textures,hlsl,pixel-shader,Directx,Shader,Textures,Hlsl,Pixel Shader,有人能解释一下HLSL中Tex2D函数背后的数学原理吗 其中一个示例是:给定一个具有4个顶点的四边形,其上的纹理坐标为(0,0)(0,1)(1,0)(1,1),纹理的宽度和高度分别为640和480。着色器如何确定要执行的采样次数?如果要将texel直接映射到像素,是否意味着着色器需要执行640*480次采样,并且纹理坐标以某种梯度增加?另外,如果您能提供更多关于这个主题的参考资料和文章,我将不胜感激 谢谢。在顶点着色器之后,光栅化器将三角形“转换”为像素。每个像素与屏幕位置相关联,三角形的顶点属

有人能解释一下HLSL中Tex2D函数背后的数学原理吗

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


谢谢。

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

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

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

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

可以将纹理视为二维纹理数组。tex2D仅返回请求位置的texel,根据使用的采样器执行某种插值(纹理坐标通常与纹理大小相关,因此硬件将它们转换为绝对坐标)


此链接可能很有用:

仅用于完整性:
tex2D
还可以使用ddx和ddy或lod级别为您进行Mipmapping。