66 lines
1.9 KiB
Plaintext
66 lines
1.9 KiB
Plaintext
!!VP1.0
|
|
|
|
# Compute the surface space light vectors for diffuse bump mapping as well
|
|
# as a fog factor for an atmospheric haze effect.
|
|
|
|
# c[0]..c[3] contains the concatenation of the modelview and projection matrices.
|
|
# c[4]..c[7] contains the inverse transpose of the modelview
|
|
# c[15] contains the eye position in object space
|
|
# c[16] contains the light direction in object space
|
|
# c[17] contains H, the normalized sum of the eye and light direction
|
|
# c[20] contains the light color * object color
|
|
# c[32] contains the ambient light color * object color
|
|
# c[33] contains the haze color
|
|
# c[40] contains (0, 1, 0.5, specPower)
|
|
# v[6] contains the tangent vector
|
|
|
|
# Transform the vertex by the modelview matrix
|
|
DP4 o[HPOS].x, c[0], v[OPOS];
|
|
DP4 o[HPOS].y, c[1], v[OPOS];
|
|
DP4 o[HPOS].z, c[2], v[OPOS];
|
|
DP4 o[HPOS].w, c[3], v[OPOS];
|
|
|
|
# Compute the diffuse light component and clamp it to zero
|
|
DP3 R2, v[NRML], c[16];
|
|
MAX R2.x, R2, c[40].xxxx;
|
|
|
|
# Get the normalized vector from the eye to the vertex
|
|
ADD R4, c[15], -v[OPOS];
|
|
DP3 R0.w, R4, R4;
|
|
RSQ R0.w, R0.w;
|
|
MUL R4.xyz, R4, R0.w;
|
|
|
|
# Output the fog factor
|
|
DP3 R2.y, v[NRML], R4;
|
|
ADD R2.y, c[40].y, -R2.y;
|
|
MUL o[FOGC].x, R2.x, R2.y;
|
|
|
|
# We're done with the haze/fog stuff; now compute the surface space
|
|
# light direction.
|
|
MOV R1, v[NRML];
|
|
MOV R2, v[6];
|
|
|
|
# Compute the binormal--cross product of normal and tangent
|
|
MUL R3, R1.zxyw, R2.yzxw;
|
|
MAD R3, R1.yzxw, R2.zxyw, -R3;
|
|
|
|
# Assume that the tangent and normal are orthonormal; otherwise
|
|
# we need to normalize R3
|
|
#DP3 R0.w, R3, R3;
|
|
#RSQ R0.w, R0.w;
|
|
#MUL R3.xyz, R3, R0.w;
|
|
|
|
# Transform the light direction from object space into surface space
|
|
DP3 R0.x, R2, c[16];
|
|
DP3 R0.y, -R3, c[16];
|
|
DP3 R0.z, R1, c[16];
|
|
# Compress the light direction to fit in the primary color and output it
|
|
MOV R5, c[40];
|
|
MAD o[COL0], R0, R5.z, R5.z;
|
|
|
|
# Output the texture coordinates.
|
|
MOV o[TEX0], v[TEX0];
|
|
MOV o[TEX1], v[TEX1];
|
|
|
|
END
|