home *** CD-ROM | disk | FTP | other *** search
- ; Generates texture coordinates based
- ; on the input normal. The texture coordinates
- ; represent a ray from the eye reflected from the object,
- ; based on the normal.
- ; This is an implementation of D3D's CAMERASPACEREFLECTIONVECTOR
-
- ; Shader version
- vs.1.0
-
- ;#include "reflect.h"
-
- ;#define CV_ZERO 0
- ;#define CV_ONE 1
-
- ;#define CV_WORLDVIEWPROJ_0 2
- ;#define CV_WORLDVIEWPROJ_1 3
- ;#define CV_WORLDVIEWPROJ_2 4
- ;#define CV_WORLDVIEWPROJ_3 5
-
- ;#define CV_WORLDVIEWIT_0 6
- ;#define CV_WORLDVIEWIT_1 7
- ;#define CV_WORLDVIEWIT_2 8
-
- ;#define CV_VECA 10
- ;#define CV_VECD 11
- ;#define CV_VECSIN 12
- ;#define CV_VECCOS 13
-
- ;#define CV_HALF 14
- ;#define CV_LIGHT1_DIRECTION 15
-
- ;#define CV_WORLDVIEW_0 16
- ;#define CV_WORLDVIEW_1 17
- ;#define CV_WORLDVIEW_2 18
- ;#define CV_WORLDVIEW_3 19
-
- ;;;
-
- ;#define R_EYE_VERTEX r8
- ;#define R_EYE_NORMAL r9
- ;#define R_EYE_VECTOR r3
- ;#define R_DOT2 r4
-
- ; Transform position
- dp4 oPos.x, v0, c2
- dp4 oPos.y, v0, c3
- dp4 oPos.z, v0, c4
- dp4 oPos.w, v0, c5
-
- dp4 r8.x, v0, c16
- dp4 r8.y, v0, c17
- dp4 r8.z, v0, c18
- dp4 r8.w, v0, c19
-
- ; Create r3, the normalized vector from the eye to the vertex
- dp3 r3.w, r8, r8
- rsq r3.w, r3.w
- mul r3, r8, r3.w
-
- ; Transform normal to eye-space
- ; We use the inverse transpose of the worldview
- ; matrix to do this
- dp3 r9.x, v1, c6
- dp3 r9.y, v1, c7
- dp3 r9.z, v1, c8
-
- ; Need to re-normalize normal
- dp3 r9.w, r9, r9
- rsq r9.w, r9.w
- mul r9, r9, r9.w
-
- ; Calculate E - 2*(E dot N)*N
- dp3 r4, r3, r9
- add r4, r4, r4
- mul r9, r9, r4
- add oT0, r3, -r9
- mov oT0.w, c1.x
-