In Triangle.Illuminate( ) ...
if (l[i].lightType == Light.SHADER) {
lx = vlist[v[j]].x - l[i].x;
ly = vlist[v[j]].y - l[i].y;
lz = vlist[v[j]].z - l[i].z;
float u, v, w;
u = l[i].m[0]*lx + l[i].m[1]*ly + l[i].m[2]*lz;
v = l[i].m[3]*lx + l[i].m[4]*ly + l[i].m[5]*lz;
w = l[i].m[6]*lx + l[i].m[7]*ly + l[i].m[8]*lz;
tq[j] = (int) (lightTexture.width*TSCALE*u);
ts[j] = (int) (lightTexture.height*TSCALE*v);
tt[j] = (int) (TSCALE*w);
} else
In Triangle.ScanConvert( ) after setting up plane equations for q, s, and t...
if (lightTexture != null) {
int i = (int) (q/t);
int j = (int) (s/t);
if (i < 0) i = 0;
else if (i >= lightTexture.width) i = lightTexture.width - 1;
if (j < 0) j = 0;
else if (j >= lightTexture.height) j = lightTexture.height - 1;
int rgb = lightTexture.getPixel(i, j);