//--------------------------------------------------------------------------- // MLRPrimitive * MLRIndexedPolyMesh::LightMapLighting(MLRLight *light) { int i, j, k, stride, len = lengths.GetLength(); LinearMatrix4D matrix = LinearMatrix4D::Identity; Point3D lightPos, hitPoint; UnitVector3D up, right; Scalar f, u, v; light->GetInShapePosition(lightPos); for(i=0,j=0,k=0;i<len;i++) { stride = lengths[i]; if(testList[i] == 0) { j += stride; continue; } f = facePlanes[i].DistanceTo(lightPos); if(f>0.0f) { hitPoint.Multiply(facePlanes[i].normal, -f); hitPoint+=lightPos; matrix.AlignAxis(facePlanes[i].normal, Z_Axis, X_Axis, Y_Axis); matrix.GetWorldRightInLocal(&right); matrix.GetWorldUpInLocal(&up); for(k=j;k<stride+j;k++) { Vector3D vec(coords[index[k]]); vec-=hitPoint; u = (right*vec)/f; v = (up*vec)/f; } testList[i] = 0; } j += stride; } return NULL; }