I dont know:
Public Sub Constuire_Ombre(ByVal Index As Integer, ByVal Lumiere_Position As Vector3, ByRef lMesh As Mesh) Tab_Ombre(Index).numVertices = 0 Dim tempVertices As Vertex() = Nothing Dim indices As Short() = Nothing Dim edges As Short() = Nothing Dim numFaces As Integer = lMesh.NumberFaces Dim numVerts As Integer = lMesh.NumberVertices Dim numEdges As Integer = 0 ' Allocate a temporary edge list edges = New Short(numFaces * 6) {} ' Lock the geometry buffers tempVertices = CType(lMesh.LockVertexBuffer(GetType(Vertex), 0, numVerts), Vertex()) indices = CType(lMesh.LockIndexBuffer(GetType(Short), 0, numFaces * 3), Short()) ' For each face Dim i As Integer For i = 0 To numFaces - 1 Dim face0 As Short = indices((3 * i + 0)) Dim face1 As Short = indices((3 * i + 1)) Dim face2 As Short = indices((3 * i + 2)) Dim v0 As Vector3 = tempVertices(face0).p Dim v1 As Vector3 = tempVertices(face1).p Dim v2 As Vector3 = tempVertices(face2).p ' Transform vertices or transform light? Dim vCross1 As Vector3 = Vector3.Subtract(v2, v1) Dim vCross2 As Vector3 = Vector3.Subtract(v1, v0) Dim vNormal As Vector3 = Vector3.Cross(vCross1, vCross2) If Vector3.Dot(vNormal, Lumiere_Position) >= 0.0F Then AddEdge(edges, numEdges, face0, face1) AddEdge(edges, numEdges, face1, face2) AddEdge(edges, numEdges, face2, face0) End If Next i For i = 0 To numEdges - 1 Dim v1 As Vector3 = tempVertices(edges((2 * i + 0))).p Dim v2 As Vector3 = tempVertices(edges((2 * i + 1))).p Dim v3 As Vector3 = Vector3.Subtract(v1, Vector3.Multiply(Lumiere_Position, 1000)) Dim v4 As Vector3 = Vector3.Subtract(v2, Vector3.Multiply(Lumiere_Position, 1000)) ' Add a quad (two triangles) to the vertex list Tab_Ombre(Index).vertices(Tab_Ombre(Index).numVertices) = v1 : Tab_Ombre(Index).numVertices += 1 Tab_Ombre(Index).vertices(Tab_Ombre(Index).numVertices) = v2 : Tab_Ombre(Index).numVertices += 1 Tab_Ombre(Index).vertices(Tab_Ombre(Index).numVertices) = v3 : Tab_Ombre(Index).numVertices += 1 Tab_Ombre(Index).vertices(Tab_Ombre(Index).numVertices) = v2 : Tab_Ombre(Index).numVertices += 1 Tab_Ombre(Index).vertices(Tab_Ombre(Index).numVertices) = v4 : Tab_Ombre(Index).numVertices += 1 Tab_Ombre(Index).vertices(Tab_Ombre(Index).numVertices) = v3 : Tab_Ombre(Index).numVertices += 1 Next i Tab_Ombre(Index).Nbr_VertDiv3 = Tab_Ombre(Index).numVertices / 3 ' Unlock the geometry buffers lMesh.UnlockVertexBuffer() lMesh.UnlockIndexBuffer() End Sub Private Sub AddEdge(ByVal edges() As Short, ByRef numEdges As Integer, ByVal v0 As Short, ByVal v1 As Short) ' Remove interior edges (which appear in the list twice) Dim i As Integer For i = 0 To numEdges - 1 If edges((2 * i + 0)) = v0 And edges((2 * i + 1)) = v1 Or (edges((2 * i + 0)) = v1 And edges((2 * i + 1)) = v0) Then If numEdges > 1 Then edges((2 * i + 0)) = edges((2 * (numEdges - 1) + 0)) edges((2 * i + 1)) = edges((2 * (numEdges - 1) + 1)) End If numEdges -= 1 Return End If Next i edges((2 * numEdges + 0)) = v0 edges((2 * numEdges + 1)) = v1 numEdges += 1 End Sub 'AddEdge
[Edited by - ShadowTzu on November 3, 2005 8:29:03 AM]