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;
        }
예제 #2
0
        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
                                                                 ));
                }
            }
        }