// // Vertex lighting shader // // light direction (view space) float3 lightDir < string UIDirectional = "Light Direction"; > = {0.577, -0.577, 0.577}; // light intensity float4 I_a = { 0.1f, 0.1f, 0.1f, 0.1f }; // ambient float4 I_d = { 1.0f, 1.0f, 1.0f, 1.0f }; // diffuse float4 I_s = { 1.0f, 1.0f, 1.0f, 1.0f }; // specular // material reflectivity float4 k_a : MATERIALAMBIENT = { 1.0f, 1.0f, 1.0f, 1.0f }; // ambient float4 k_d : MATERIALDIFFUSE = { 1.0f, 1.0f, 1.0f, 1.0f }; // diffuse float4 k_s : MATERIALSPECULAR= { 1.0f, 1.0f, 1.0f, 1.0f }; // specular float n : MATERIALPOWER = 32.0f; // power // texture string XFile = "tiger\\tiger.x"; // model int BCLR = 0xff202080; // background colour texture Tex0 < string name = "tiger\\tiger.bmp"; >; // Texture // transformations float4x4 World : WORLD; float4x4 View : VIEW; float4x4 Projection : PROJECTION; struct VS_OUTPUT { float4 Pos : POSITION; float4 Diff : COLOR0; float4 Spec : COLOR1; float2 Tex : TEXCOORD0; }; VS_OUTPUT VS( float3 Pos : POSITION, float3 Norm : NORMAL, float2 Tex : TEXCOORD0) { VS_OUTPUT Out = (VS_OUTPUT)0; float3 L = -lightDir; float4x4 WorldView = mul(World, View); float3 P = mul(float4(Pos, 1), (float4x3)WorldView); // position (view space) float3 N = normalize(mul(Norm, (float3x3)WorldView)); // normal (view space) float3 R = normalize(2 * dot(N, L) * N - L); // reflection vector (view space) float3 V = -normalize(P); // view direction (view space) Out.Pos = mul(float4(P, 1), Projection); // position (projected) Out.Diff = I_a * k_a + I_d * k_d * max(0, dot(N, L)); // diffuse + ambient Out.Spec = I_s * k_s * pow(max(0, dot(R, V)), n/4); // specular Out.Tex = Tex; return Out; } sampler Sampler = sampler_state { Texture = (Tex0); MipFilter = LINEAR; MinFilter = LINEAR; MagFilter = LINEAR; }; technique TVertexShaderOnly { pass P0 { // lighting Lighting = FALSE; SpecularEnable = TRUE; // samplers Sampler[0] = (Sampler); // texture stages ColorOp[0] = MODULATE; ColorArg1[0] = TEXTURE; ColorArg2[0] = DIFFUSE; AlphaOp[0] = MODULATE; AlphaArg1[0] = TEXTURE; AlphaArg2[0] = DIFFUSE; ColorOp[1] = DISABLE; AlphaOp[1] = DISABLE; // shaders VertexShader = compile vs_1_1 VS(); PixelShader = NULL; } }