- !!ARBvp1.0
- PARAM MV[4] = { state.matrix.modelview };
- PARAM MVInv[4] = { state.matrix.modelview.invtrans };
- PARAM MVP[4] = { state.matrix.mvp };
- TEMP ObjectCoord, EyeCoord, ClippingCoord;
- TEMP Normal, EyeNormal, TexCoord;
- TEMP Ray, Temp, Reflect;
- MOV ObjectCoord, vertex.position;
- MOV Normal, vertex.normal;
- DP4 EyeCoord.x, MV[0], ObjectCoord;
- DP4 EyeCoord.y, MV[1], ObjectCoord;
- DP4 EyeCoord.z, MV[2], ObjectCoord;
- DP4 EyeCoord.w, MV[3], ObjectCoord;
- DP4 ClippingCoord.x, MVP[0], ObjectCoord;
- DP4 ClippingCoord.y, MVP[1], ObjectCoord;
- DP4 ClippingCoord.z, MVP[2], ObjectCoord;
- DP4 ClippingCoord.w, MVP[3], ObjectCoord;
- DP3 EyeNormal.x, MVInv[0], Normal;
- DP3 EyeNormal.y, MVInv[1], Normal;
- DP3 EyeNormal.z, MVInv[2], Normal;
- SUB Ray.xyz, EyeCoord, MV[3];
- # Normalize Ray
- DP3 Ray.w, Ray, Ray; # Ray.x*Ray.x + Ray.y*Ray.y + Ray.z*Ray.z
- RSQ Ray.w, Ray.w; # 1/Sqrt(Ray.w)
- MUL Ray.xyz, Ray, Ray.w; # Ray.x*Ray.w, Ray.y*Ray.w, Ray.z*Ray.w
- # Reflect = Ray - 2.0 * EyeNormal * dot(Ray, EyeNormal)
- DP3 Temp.x, Ray, EyeNormal; # dot(Ray, EyeNormal)
- MUL Temp.x, Temp.x, 2.0; # dot(Ray, EyeNormal) * 2.0
- MUL Temp, EyeNormal, Temp.x; # dot(Ray, EyeNormal) * 2.0 * EyeNormal
- SUB Reflect, Ray, Temp; # Ray - dot(Ray, EyeNormal) * 2.0 * EyeNormal
- # m = Sqrt(Reflect.x^2 + Reflect.y^2 + (Reflect.z + 1)^2)
- MUL Temp.x, Reflect.x, Reflect.x; # Reflect.x^2
- MUL Temp.y, Reflect.y, Reflect.y; # Reflect.y^2
- ADD Temp.w, Reflect.z, 1.0; # Reflect.z + 1
- MUL Temp.z, Temp.w, Temp.w; # (Reflect.z+1)^2
- ADD Temp.w, Temp.x, Temp.y; # Reflect.x^2 + Reflect.y^2
- ADD Temp.w, Temp.w, Temp.z; # Reflect.x^2 + Reflect.x^2 + (Reflect.z + 1)^2
- RSQ Temp.x, Temp.w; # 1/Sqrt(Reflect.x^2 + Reflect.x^2 + (Reflect.z + 1)^2)
- # s = Reflect.x/m + 0.5
- MUL TexCoord.x, Reflect.x, Temp.x; # Reflect.x * (1/m)
- ADD TexCoord.x, TexCoord.x, 0.5; # Reflect.x * (1/m) + 0.5
- # t = Reflect.y/m + 0.5
- MUL TexCoord.y, Reflect.y, Temp.x; # Reflect.y * (1/m)
- ADD TexCoord.y, TexCoord.y, 0.5; # Reflect.y * (1/m) + 0.5
- MOV TexCoord.z, 0.0;
- MOV TexCoord.w, 1.0;
- MOV result.position, ClippingCoord;
- MOV result.texcoord, TexCoord;
- MOV result.color, vertex.color;
- END