admin 管理员组

文章数量: 1087652

D3D12渲染技术之在着色器中采样

我们直奔主题,纹理对象在HLSL中定义,并使用以下语法分配给纹理寄存器:

Texture2D gDiffuseMap : register(t0);

这个换成在Unity引擎或者UE4引擎中就是提供的可视化操作界面,而在DX中的表示是按照上面的写法,这样可以通过引擎对其进行赋值操作。
请注意,纹理寄存器使用由tn指定,其中n是标识纹理寄存器槽的整数,根签名定义指定从slot参数到着色器寄存器的映射, 这是应用程序代码如何将SRV绑定到着色器中的特定Texture2D对象。
类似地,采样器对象定义为HLSL,并使用以下语法分配给采样器寄存器:

SamplerState gsamPointWrap    : register(s0);
SamplerState gsamPointClamp    : register(s1);
SamplerState gsamLinearWrap    : register(s2);
SamplerState gsamLinearClamp   : register(s3);
SamplerState gsamAnisotropicWrap : register(s4);
SamplerState gsamAnisotropicClamp : register(s5);

这些采样器对应于我们在上篇博客中设置的静态采样器阵列, 请注意,纹理寄存器使用sn指定,其中n是标识采样器寄存器槽的整数。
现在,给定像素着色器中像素的一对纹理坐标(u,v),我们实际使用Texture2D :: Sample方法对纹理进行采样:

Texture2D gDiffuseMap : register(t0);
SamplerState gsamPointWrap    : register(s0);
SamplerState gsamPointClamp    : register(s1);
SamplerState gsamLinearWrap    : register(s2);
SamplerState gsamLinearClamp   : register(s3);
SamplerState gsamAnisotropicWrap : register(s4);
SamplerState gsamAnisotropicClamp : register(s5);struct VertexOut
{float4 PosH  : SV_POSITION;float3 PosW  : POSITION;float3 NormalW : NORMAL;float2 TexC  : TEXCOORD;
};float4 PS(VertexOut pin) : SV_Target
{
float4 diffuseAlbedo = gDiffuseMap.Sample(gsamAnisotropicWrap, pin.TexC) * gDiffuseAlbedo;…

我们为第一个参数传递一个SamplerState对象,指示如何对纹理数据进行采样,并为第二个参数传递像素的(u,v)纹理坐标。 此方法使用SamplerState对象指定的过滤方法从指定(u,v)点处的纹理贴图返回插值颜色。

本文标签: D3D12渲染技术之在着色器中采样