HLSL基础练习

VertexShader 顶点着色器 替换的是固定渲染管线中的变换和光照阶段。

PixelShader 像素着色器 替换的是固定渲染管线中的多纹理、光栅化阶段。

所以,VS操纵的是顶点、法线、多边形这类对象,PS操纵的是像素,每个像素点,材质这类的对象。

float4x4 mWorldViewProj : WORLDVIEWPROJECTION;


string XFile = "teapot.x";   // Model to load


//顶点着色器,代替变换和光照阶段
void VS_Main(in float4 vPos : POSITION, 
                  in float2 vTex  : TEXCOORD0,
                  out float4 oPos : POSITION,
                  out float2 oTex : TEXCOORD0)
{
     //VS_OUTPUT OUT = (VS_OUTPUT)0;
     oPos = mul(vPos, mWorldViewProj);
     oTex = vTex;     
     //return OUT;
}

//像素着色器,替换多纹理阶段,纹理混合
//用于处理色彩
//像素是由RGBA四个分量混合的。
void PS_Main(in float2 vTex : TEXCOORD0,
             out float4 oCol : COLOR0)
{
    oCol = tex2D(DiffuseSampler, vTex);    
    oCol.r = 1.0f;
    oCol.g = 0.0f;
    oCol.b = 0.0f;    
    oCol.a = 0.5f;
}


technique tec0
{
    pass p0
    {  
         // Set up reasonable material defaults
        MaterialAmbient = {1.0, 1.0, 1.0, 1.0}; 
        MaterialDiffuse = {1.0, 0.0, 0.0, 1.0};  //RGBA
        MaterialSpecular = {1.0, 1.0, 1.0, 1.0}; 
        MaterialPower = 40.0f; 
        
        LightType[0]      = DIRECTIONAL;
        LightDiffuse[0]   = {1.0, 1.0, 1.0, 1.0};
        LightSpecular[0]  = {1.0, 1.0, 1.0, 1.0}; 
        LightAmbient[0]   = {0.1, 0.1, 0.1, 1.0};
        LightDirection[0] = <lightDir>; // Use the vector parameter defined above
        LightRange[0]     = 100000.0;
        LightEnable[0] = True;
        Lighting = True;
        SpecularEnable = True;
        
        vertexShader = compile vs_2_0 VS_Main();
        pixelShader = compile ps_2_0 PS_Main();
       
        
        // Set up one directional light
        
        
        // Turn lighting on and use light 0
        
        
        // Set up texture stage 0
        
        Texture[0] = <tex0>; // Use the texture parameter defined above
        ColorOp[0] = Modulate;
        ColorArg1[0] = Texture;
        ColorArg2[0] = Diffuse;
        AlphaOp[0] = Modulate;
        AlphaArg1[0] = Texture;
        AlphaArg2[0] = Diffuse;
        MinFilter[0] = Linear;
        MagFilter[0] = Linear;
        MipFilter[0] = Linear;
        
        // Disable texture stage 1
        ColorOp[1] = Disable;
        AlphaOp[1] = Disable;        
    }
}

  程序加载一个茶壶,teapot.x文件。

想改变茶壶的颜色,就改变像素着色器的输出的rgb三个分量。r-红色,g-绿色, b-蓝色。a-透明度。

程序要用到EffectEdit。 保存为.fx文件。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值