texture2D diffuseMap0; sampler2D d0_Sampler = sampler_state { Texture = ; MinFilter = linear; MagFilter = linear; MipFilter = linear; }; texture2D normalMap0; sampler2D n0_Sampler = sampler_state { Texture = ; MinFilter = linear; MagFilter = linear; MipFilter = linear; }; struct VertexIn { float4 vec4_position : POSITION0; float3 vec3_normal : NORMAL0; float2 vec2_textureCoords : TEXCOORD0; float3 vec3_tangent : TANGENT0; float3 vec3_binormal : BINORMAL0; }; struct PixelIn { float4 vec4_position : POSITION0; float2 vec2_textureCoords : TEXCOORD0; float3 vec3_View : TEXCOORD1; float3x3 WorldToTangentSpace : TEXCOORD2; }; struct PixelOut { float4 color : COLOR0; }; float3 LightDirection; // 0.7 0 -0.7 float4 DiffuseColor; //White float DiffuseIntensity; // 0.5 float4 vec4_Eye; //last column in view matrix float4 SpecularColor; //white float4x4 mat_World; //identity float4x4 mat_View; //camera matrix float4x4 mat_Projection; //projection float4x4 WorldInverseTranspose; float4 AmbientColor; //white float AmbientIntensity; // 1.0 PixelIn TexturedVS(VertexIn input) { PixelIn output = (PixelIn)0; float4 worldPosition = mul(input.vec4_position, mat_World); float4 viewPosition = mul(worldPosition, mat_View); output.vec4_position = mul(viewPosition, mat_Projection); output.vec3_View = normalize(vec4_Eye - worldPosition); output.WorldToTangentSpace[0] = mul(normalize(input.vec3_tangent), WorldInverseTranspose); output.WorldToTangentSpace[1] = mul(normalize(input.vec3_binormal), WorldInverseTranspose); output.WorldToTangentSpace[2] = mul(normalize(input.vec3_normal), WorldInverseTranspose); output.vec2_textureCoords=input.vec2_textureCoords; return output; } PixelOut TexturedPS(PixelIn input) { PixelOut output = (PixelOut)0; float3 color=tex2D(d0_Sampler,input.vec2_textureCoords); float3 bump = 2.0 *(tex2D(n0_Sampler, input.vec2_textureCoords)) - 1.0; bump = normalize(mul(bump, input.WorldToTangentSpace)); float3 diffuse = saturate(dot(-LightDirection,bump)); float3 reflect = normalize(2*diffuse*bump-LightDirection); float3 specular = pow(saturate(dot(reflect,input.vec3_View)),5); float3 ambientColor=color*AmbientColor*AmbientIntensity; float3 diffuseColor=color*DiffuseColor*DiffuseIntensity*diffuse; float3 specularColor=color*SpecularColor*specular; output.color=float4(ambientColor+diffuseColor+specularColor,1); return output; } technique Textured { pass Pass0 { VertexShader = compile vs_2_0 TexturedVS(); PixelShader = compile ps_2_0 TexturedPS(); } }