public void CombineFace(OpenMetaverse.Rendering.Face face) { int verticesBase = Vertices.Count; PrimFace.FaceData faceData = (PrimFace.FaceData)face.UserData; //dump the vertices as they are Vertices.AddRange(faceData.Vertices); Normals.AddRange(faceData.Normals); UVs.AddRange(faceData.TexCoords); //dump a material for the entire VIEWER FACE Materials.Add(face.TextureFace); for (int i = 0; i < faceData.Indices.Length; i += 3) { ushort materialsIndex = (ushort)(Materials.Count - 1); ushort a = (ushort)(faceData.Indices[i] + (verticesBase / 3)); ushort b = (ushort)(faceData.Indices[i + 1] + (verticesBase / 3)); ushort c = (ushort)(faceData.Indices[i + 2] + (verticesBase / 3)); EncodedIndices.AddRange(EncodeFace(materialsIndex, a, b, c)); } TotalFaces += faceData.Indices.Length / 3; }
private void CreateVertexCloud(List <Tuple <Vector3, Vector2, Vector3, int> > newVertsWithUvsAndNormalsAndMaterial) { foreach (var matAndface in _sortedFaces) { int verticesBase = Vertices.Count; PrimFace.FaceData faceData = (PrimFace.FaceData)matAndface.Value.UserData; for (int i = 0; i < faceData.Indices.Length; i += 3) { ushort a = (ushort)(faceData.Indices[i] + (verticesBase / 3)); ushort b = (ushort)(faceData.Indices[i + 1] + (verticesBase / 3)); ushort c = (ushort)(faceData.Indices[i + 2] + (verticesBase / 3)); newVertsWithUvsAndNormalsAndMaterial.Add(new Tuple <Vector3, Vector2, Vector3, int>( new Vector3(-faceData.Vertices[a * 3], faceData.Vertices[a * 3 + 1], faceData.Vertices[a * 3 + 2]), new Vector2(faceData.TexCoords[a * 2], faceData.TexCoords[a * 2 + 1]), new Vector3(-faceData.Normals[a * 3], faceData.Normals[a * 3 + 1], faceData.Normals[a * 3 + 2]), matAndface.Key )); newVertsWithUvsAndNormalsAndMaterial.Add(new Tuple <Vector3, Vector2, Vector3, int>( new Vector3(-faceData.Vertices[b * 3], faceData.Vertices[b * 3 + 1], faceData.Vertices[b * 3 + 2]), new Vector2(faceData.TexCoords[b * 2], faceData.TexCoords[b * 2 + 1]), new Vector3(-faceData.Normals[b * 3], faceData.Normals[b * 3 + 1], faceData.Normals[b * 3 + 2]), matAndface.Key )); newVertsWithUvsAndNormalsAndMaterial.Add(new Tuple <Vector3, Vector2, Vector3, int>( new Vector3(-faceData.Vertices[c * 3], faceData.Vertices[c * 3 + 1], faceData.Vertices[c * 3 + 2]), new Vector2(faceData.TexCoords[c * 2], faceData.TexCoords[c * 2 + 1]), new Vector3(-faceData.Normals[c * 3], faceData.Normals[c * 3 + 1], faceData.Normals[c * 3 + 2]), matAndface.Key )); } } }