/************************************************** * File: TandL.txt Vertex Shader * * Author: Ben Cohen (02/11/2000) * * Description: Standard transformation and * lighting vertex shader * *************************************************/ /************************************************* * Constants: * * c0 - constants vector {0,1.0,0.5,256} * c1 - screen offsets {0.53125, 0.53125, 0.03125, 0.0} * c2-c5 - World->screen transformation matrix. * c6 - Light direction * c7 - Directional light colour * c8 - Ambient light Colour * * Streams: * v0 - Position vector {x,y,z,w} * v1 - Normal {x,y,z,w} * v2 - S Basis vector * v3 - T Basis vector * v4 - colour * v5 - Texture co-ords {u,v} * ************************************************/ xvs.1.0 #define S_VECTOR v2 #define T_VECTOR v3 #define SxT_VECTOR v4 #define LIGHT_LOCAL r3 #include "Shader_def.h" /* Transform position */ dp4 oPos.x, v0, c[CV_WORLDVIEWPROJ_0] dp4 oPos.y, v0, c[CV_WORLDVIEWPROJ_1] dp4 oPos.z, v0, c[CV_WORLDVIEWPROJ_2] dp4 oPos.w, v0, c[CV_WORLDVIEWPROJ_3] ; transform light by basis vectors to put it ; into texture space dp3 LIGHT_LOCAL.x, S_VECTOR.xyz, c[CV_LIGHT_START + 1] ; quick hack dp3 LIGHT_LOCAL.y, T_VECTOR.xyz, c[CV_LIGHT_START + 1] ; quick hack dp3 LIGHT_LOCAL.z, SxT_VECTOR.xyz, c[CV_LIGHT_START + 1] ; quick hack ; Normalize the light vector dp3 LIGHT_LOCAL.w, LIGHT_LOCAL, LIGHT_LOCAL rsq LIGHT_LOCAL.w, LIGHT_LOCAL.w mul LIGHT_LOCAL, LIGHT_LOCAL, LIGHT_LOCAL.w add LIGHT_LOCAL, LIGHT_LOCAL, c[CV_CONSTANT].y mul LIGHT_LOCAL, LIGHT_LOCAL, c[CV_CONSTANT].z mul LIGHT_LOCAL, LIGHT_LOCAL, c[CV_LIGHT_START] add oD0, LIGHT_LOCAL, c[CV_AMBLIGHT_COLOUR] ; Set alpha to 1 mov oD0.w, c[CV_CONSTANT].y /* Copy texture coordinates across */ mov oT0, v6 mov oT1, v6 ;/***************/ ;/* END OF FILE */ ;/***************/