3.2多纹理效果的像素着色器

    技术2022-05-11  53

    3.2多纹理效果的像素着色器

           下面是像素着色器的代码,该代码存储于ps.txt中,该像素着色器根据输入的两套纹理坐标对对应的纹理贴图进行采样,根据一定比例Scalar混合后输出像素颜色。

    //全局变量

     

    //存储颜色混合的比例值s,其中

    //Scalar.x = s

    //Scalar.y = 1-s

    vector Scalar;

     

    //纹理

    texture Tex0;

    texture Tex1;

     

    //纹理采样器

    sampler Samp0 =

    sampler_state

    {

        Texture = <Tex0>;

        MipFilter = LINEAR;

        MinFilter = LINEAR;

        MagFilter = LINEAR;

    };

     

    sampler Samp1 =

    sampler_state

    {

        Texture = <Tex1>;

        MipFilter = LINEAR;

        MinFilter = LINEAR;

        MagFilter = LINEAR;

    };

     

    //输入两套纹理坐标

    struct PS_INPUT

    {

           float2 uvCoords0 : TEXCOORD0;

           float2 uvCoords1 : TEXCOORD1;

    };

     

    //输出像素颜色

    struct PS_OUTPUT

    {

           float4 Color : COLOR0;

    };

     

    //入口函数

    PS_OUTPUT PS_Main(PS_INPUT input)

    {

           PS_OUTPUT output = (PS_OUTPUT)0;

           //分别对两个纹理进行采样按照比例混合后输出颜色值

           output.Color = tex2D(Samp0, input.uvCoords0)*Scalar.x + tex2D(Samp1, input.uvCoords1)*Scalar.y;

           return output;

    }

           整个程序很容易理解,程序中涉及到着色器的纹理和采样,是我们第一次接触的内容,下面给于说明。

    3.2.1HLSL采样器和纹理

           vectormatrix一样,采样器sample和纹理texture也是HLSL语言的一种类型,HLSL着色器使用采样器对指定纹理进行采样,得到采样后的颜色值以供处理。

           它们的用法如下:

           //声明一个纹理变量

           texture g_texture;

     

           //定义采样器

           sampler g_samp =

           sampler_state

           {

                  //关联到纹理

           Texture = <g_texture>;

           //设置采样器状态

               MipFilter = LINEAR;

               MinFilter = LINEAR;

               MagFilter = LINEAR;

           };

     

           //调用HLSL内置函数tex2D取得颜色值,参数一为采样器,参数二为纹理坐标

           vector Color = tex2D(g_samp, uvCoords);

           更多HLSL采样器和纹理的内容请参见DirectX文档。

     

           以上是本例用到的像素着色器,在接下来的应用程序中,我们将给三个着色器全局变量赋值:

    ²        Scalar

                  存储颜色混合的比例值s,其中Scalar.x = s, Scalar.y = 1-s;

    ²        Samp0

                  第一层纹理采样器;

    ²        Samp1

                  第二层纹理采样器;

           像素着色器的输入结构中我们设定了一个顶点对应两套纹理坐标,读者可以留意一下应用程序中对应的顶点格式的定义。

     


    最新回复(0)