168 |
|
V = if( crosslen`P. - FTINY, |
169 |
|
Pz - Nz*(Px*Nx + Py*Ny)/crosslen`P., |
170 |
|
Py); |
171 |
+ |
|
172 |
+ |
{ Local hemisphere direction for *func & *data types } |
173 |
+ |
{ last 3 real args = unnormalized up-vector } |
174 |
+ |
Vux`P. = arg(AC-1)*NzP - arg(AC)*NyP; |
175 |
+ |
Vuy`P. = arg(AC)*NxP - arg(AC-2)*NzP; |
176 |
+ |
Vuz`P. = arg(AC-2)*NyP - arg(AC-1)*NxP; |
177 |
+ |
vnorm`P. = 1/sqrt(Vux`P.*Vux`P. + Vuy`P.*Vuy`P. + Vuz`P.*Vuz`P.); |
178 |
+ |
Vnx`P. = Vux`P.*vnorm`P.; |
179 |
+ |
Vny`P. = Vuy`P.*vnorm`P.; |
180 |
+ |
Vnz`P. = Vuz`P.*vnorm`P.; |
181 |
+ |
Unx`P. = NyP*Vnz`P. - NzP*Vny`P.; |
182 |
+ |
Uny`P. = NzP*Vnx`P. - NxP*Vnz`P.; |
183 |
+ |
Unz`P. = NxP*Vny`P. - NyP*Vnx`P.; |
184 |
+ |
{ Transform vectors, normalized (dx,dy,dz) away from surf } |
185 |
+ |
Ldx(dx,dy,dz) = dx*Unx`P. + dy*Uny`P. + dz*Unz`P.; |
186 |
+ |
Ldy(dx,dy,dz) = dx*Vnx`P. + dy*Vny`P. + dz*Vnz`P.; |
187 |
+ |
Ldz(dx,dy,dz) = dx*NxP + dy*NyP + dz*NzP; |
188 |
+ |
{ Incident vector transformed to our coords } |
189 |
+ |
Idx = Ldx(-Dx,-Dy,-Dz); |
190 |
+ |
Idy = Ldy(-Dx,-Dy,-Dz); |
191 |
+ |
Idz = RdotP; |