简单phong光照模型


float4x4 Scal;
float4x4 World;
float4x4 View;
float4x4 projection;
float4x4 WorldViewProjection;
float3 EyePosition;
float3 LightDir;
float4 LightColor;

struct  VertexInput
{
    float4  Position : POSITION;
    float2  Tex : TEXCOORD0;
    float3  Normal : NORMAL;
}
;


struct  VertexOutput
{
    float4  Position : POSITION;
    float2    Tex    : TEXCOORD0;
    float3    Normal : TEXCOORD1;
    float3  View     : TEXCOORD2;        
}
;


VertexOutput VertexMain(VertexInput input)
{
    VertexOutput output 
= (VertexOutput)0;
    
     WorldViewProjection 
= mul(mul(View, World), projection);
     
     output.Position 
= mul(mul(input.Position, Scal), WorldViewProjection);
     output.Tex 
= input.Tex;
     output.Normal 
= mul(input.Normal, World);
     output.View  
= EyePosition - mul(input.Position,  World);
     
     
return output;
}


float4 PixelMain(VertexOutput input) : COLOR0
{
    
float diffsum;
    
float specularsum;
    float4 color;
    
float sunshinepower;
    float4 amibent 
= float4(0.1f0.1f0.1f1.0f);
    sunshinepower 
= 16.0f;
    
    diffsum 
= specularsum = 0;
    
    
//漫反射
    LightDir = normalize(LightDir);
    diffsum 
= saturate(dot(LightDir, input.Normal));
    
    
//镜面反射
    float3 L = -LightDir;
    float3 R 
= normalize(reflect(L, input.Normal));
    float3 V 
= normalize(input.View);
    
    specularsum 
= pow(saturate(dot(R, V)), sunshinepower);
    
    color 
= specularsum + diffsum * LightColor + amibent;

    
    
return color;
}


technique techR 
{
    pass p0
    
{
        VertexShader 
= compile vs_2_0 VertexMain();
        PixelShader 
= compile ps_2_0 PixelMain();
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值