Files
clientdata/vertex_program/modules/dot3_3x2spec.inc
T
2018-04-24 13:27:52 -04:00

46 lines
1.2 KiB
PHP
Executable File

// ======================================================================
// inputs:
//
// none
//
// outputs:
//
// oT0 = texture coordinate for NRML map
// oT1 = direction to light (-1 .. 1)
// oT2 = half angle vector (-1 .. 1)
//
// ======================================================================
// build transform from object space to texture space
mov r0.xyz, vTextureCoordinateSetDOT3
mov r2.xyz, vNormal
dp3 r2.w, r2, r2
rsq r2.w, r2.w
mul r2.xyz, r2,r2.w
mul r1.xyz, r2.zxy, r0.yzx
mad r1.xyz, r2.yzx, r0.zxy, -r1.xyz
mul r1.xyz, r1, vTextureCoordinateSetDOT3.w
// pass through normal map coordinates
mov oT0, vTextureCoordinateSetNRML
//m3x3 r3.xyz, vNormal, r0
//mad oT0.xyz, r3, c0_5, c0_5
// transform the light direction into texture space
m3x3 oT1.xyz, cLightData_dot3_0_direction, r0
// calculate the half angle (H = L + V / |L + V|)
sub r3.xyz, cLightData_dot3_0_cameraPosition, vPosition
dp3 r3.w, r3, r3
rsq r3.w, r3.w
mul r3.xyz, r3, r3.w
add r3.xyz, r3, cLightData_dot3_0_direction
dp3 r3.w, r3, r3
rsq r3.w, r3.w
mul r3.xyz, r3, r3.w
// transform half angle into texture space
m3x3 oT2.xyz, r3, r0