A Little More Code
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);
    
Lecture 20   Slide 8   6.837 Fall '00