/************************************************** * File: Facing.txt Vertex Shader * * Author: Ben Cohen (02/11/2000) * * Description: Facing camera objects * *************************************************/ /************************************************* * 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 - Centre Position vector {x,y,z,w} * v1 - Vertex position {x,y,z,w} * v2 - Colour * v3 - Texture co-ords {u,v} * ************************************************/ xvs.1.0 #include "Shader_def.h" #define R_WORLDVIEW_MATRIX_0 r0 #define R_WORLDVIEW_MATRIX_1 r1 #define R_WORLDVIEW_MATRIX_2 r2 #define R_EYE_POSITION r3 #define R_EYE_DISTANCE r4 ; Copy matrix to temp registers mov r0.w, v0.x mov r1.w, v0.y mov r2.w, v0.z mov r0.xyz, c[CV_FACING_BLIT_0] mov r1.xyz, c[CV_FACING_BLIT_1] mov r2.xyz, c[CV_FACING_BLIT_2] ; Transform position by inverserworld->view matrix dp4 r0.x, v1, R_WORLDVIEW_MATRIX_0 dp4 r0.y, v1, R_WORLDVIEW_MATRIX_1 dp4 r0.z, v1, R_WORLDVIEW_MATRIX_2 dp4 r0.w, v1, c[CV_FACING_BLIT_3] ; Transform position by view->screen matrix dp4 oPos.x, r0, c[CV_WORLDVIEWPROJ_0] dp4 oPos.y, r0, c[CV_WORLDVIEWPROJ_1] dp4 oPos.z, r0, c[CV_WORLDVIEWPROJ_2] dp4 oPos.w, r0, c[CV_WORLDVIEWPROJ_3] ; Copy vertex colour across mov oD0, v2 ; Copy texture co-ords across mov oT0, v3 /* Fog calculation */ dp4 R_EYE_POSITION.x, v0, c[CV_WORLDVIEW_0] dp4 R_EYE_POSITION.y, v0, c[CV_WORLDVIEW_1] dp4 R_EYE_POSITION.z, v0, c[CV_WORLDVIEW_2] dp3 R_EYE_DISTANCE, R_EYE_POSITION, R_EYE_POSITION rsq R_EYE_DISTANCE, R_EYE_DISTANCE rcp R_EYE_DISTANCE, R_EYE_DISTANCE /* Fog */ mad oFog.x, -R_EYE_DISTANCE.y, c[CV_FOG_DATA].z, c[CV_FOG_DATA].y /***************/ /* END OF FILE */ /***************/