58 lines
1.5 KiB
Plaintext
58 lines
1.5 KiB
Plaintext
!!ARBvp1.0
|
|
|
|
# Compute ring illumination. Assumes rings made of spherical particles,
|
|
# and no occlusion or shadowing between ring particles. We also compute the
|
|
# texture coordinates for the projected shadow of a planet.
|
|
|
|
ATTRIB iPos = vertex.position;
|
|
ATTRIB iTex0 = vertex.texcoord[0];
|
|
PARAM mvp[4] = { state.matrix.mvp };
|
|
PARAM eyePos = program.env[1];
|
|
PARAM lightDir = program.env[0];
|
|
PARAM diffuse = program.env[2];
|
|
PARAM ambient = program.env[5];
|
|
PARAM texgen_s = program.env[10];
|
|
PARAM texgen_t = program.env[11];
|
|
PARAM half = 0.5;
|
|
PARAM one = 1;
|
|
OUTPUT oPos = result.position;
|
|
OUTPUT oColor = result.color;
|
|
OUTPUT oTex0 = result.texcoord[0];
|
|
OUTPUT oTex1 = result.texcoord[1];
|
|
|
|
TEMP illum;
|
|
TEMP eyeVec;
|
|
|
|
# Transform the vertex by the modelview matrix
|
|
DP4 oPos.x, mvp[0], iPos;
|
|
DP4 oPos.y, mvp[1], iPos;
|
|
DP4 oPos.z, mvp[2], iPos;
|
|
DP4 oPos.w, mvp[3], iPos;
|
|
|
|
# Get the vector from the eye to the vertex
|
|
SUB eyeVec, eyePos, iPos;
|
|
|
|
# Normalize it
|
|
DP3 eyeVec.w, eyeVec, eyeVec;
|
|
RSQ eyeVec.w, eyeVec.w;
|
|
MUL eyeVec, eyeVec, eyeVec.w;
|
|
|
|
# Compute the illumination
|
|
DP3 illum.x, eyeVec, lightDir;
|
|
ADD illum.x, illum.x, one;
|
|
MUL illum.x, illum.x, half;
|
|
|
|
# Output the texture
|
|
MOV oTex0, iTex0;
|
|
|
|
# The second texture is the shadow; we need to compute the
|
|
# it from the vertex coordinate.
|
|
MOV oTex1, one;
|
|
DP4 oTex1.x, texgen_s, iPos;
|
|
DP4 oTex1.y, texgen_t, iPos;
|
|
|
|
# Output the primary color
|
|
MAD oColor, diffuse, illum.x, ambient;
|
|
|
|
END
|