Microsoft DirectX 9.0 |
Fixed Function Diffuse Lighting and Vertex Shader Diffuse Lighting.
float3 lightDirection = {0.5f, 0.5f, 0.0f }; float4 diffuseMaterialColor = {1.0f, 0.9f, 0.9f, 1.0f }; float4x4 worldMatrix; float4x4 worldProjViewMatrix; // Given: The application has set the matrices before calling this technique. technique tec0 < string purpose = "Fixed Function Diffuse Lighting" ; > { pass P0 { MaterialDiffuse = {diffuseMaterialColor}; MaterialSpecular = {0.0f,0.0f,0.0f,0.0f}; MaterialAmbient = {0.0f,0.0f,0.0f,0.0f}; LightType[0] = DIRECTIONAL; LightDiffuse[0] = {1.0f,1.0f,1.0f,1.0f}; LightSpecular[0] = {0.0f,0.0f,0.0f,0.0f}; LightAmbient[0] = {0.0f,0.0f,0.0f,0.0f}; LightDirection[0] = {lightDirection}; LightRange[0] = 100000.0f; // Turn lighting on and use light zero LightEnable[0] = TRUE; Lighting = TRUE; // Assign diffuse color to be used ColorOp[0] = SelectArg1; ColorArg1[0] = Diffuse; AlphaOp[0] = SelectArg1; AlphaArg1[0] = Diffuse; // Only one color being used ColorOp[1] = Disable; AlphaOp[1] = Disable; // Z-buffering to be used ZEnable = true; ZWriteEnable = true; } } technique tec1 < string purpose = "Vertex Shader Diffuse Lighting" ; > { pass p0 { // Load matrices VertexShaderConstant[0] = (worldMatrix); VertexShaderConstant[4] = (worldProjViewMatrix); // Material properties of object VertexShaderConstant[9] = (1.0f,1.0f,1.0f,1.0f); VertexShaderConstant[10] = (0.0f,0.0f,0.0f,0.0f); VertexShaderConstant[11] = (0.0f,0.0f,0.0f,0.0f); // Light Properties are input from the shader application // Diffuse VertexShaderConstant[13] = (1.0f,1.0f,1.0f,1.0f); // Specular VertexShaderConstant[14] = (0.0f,0.0f,0.0f,0.0f); // Ambient VertexShaderConstant[15] = (0.0f,0.0f,0.0f,0.0f); VertexShaderConstant[16] = {lightDirection}; // Assign diffuse color to be used ColorOp[0] = SelectArg1; ColorArg1[0] = Diffuse; AlphaOp[0] = SelectArg1; AlphaArg1[0] = Diffuse; // Only one color being used ColorOp[1] = Disable; AlphaOp[1] = Disable; // Definition of the vertex shader, declarations then assembly VertexShader = asm { vs_1_1 dcl_position v0 dcl_normal v3 dcl_texcoord v7 dcl_texcoord v8 m4x4 oPos, v0, c4 // Transform point to projection space. m3x3 r0,v3,c0 // Transform normal to world space, // put result into r0. dp3 r0,r0,-c16 // Dot product against light, r0 now has lighting // constant in x, y, and z components (r,g,b). mul r0,r0,c13 // Modulate against diffuse light color. mov oD0,r0 // Put into diffuse color output. }; } }