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;
        }
Esempio n. 2
0
        public void CreateBoundingVolume(OpenMetaverse.Rendering.Face mesh, Vector3 scale)
        {
            for (int q = 0; q < mesh.Vertices.Count; q++)
            {
                if (mesh.Vertices[q].Position.X < Min.X)
                {
                    Min.X = mesh.Vertices[q].Position.X;
                }
                if (mesh.Vertices[q].Position.Y < Min.Y)
                {
                    Min.Y = mesh.Vertices[q].Position.Y;
                }
                if (mesh.Vertices[q].Position.Z < Min.Z)
                {
                    Min.Z = mesh.Vertices[q].Position.Z;
                }

                if (mesh.Vertices[q].Position.X > Max.X)
                {
                    Max.X = mesh.Vertices[q].Position.X;
                }
                if (mesh.Vertices[q].Position.Y > Max.Y)
                {
                    Max.Y = mesh.Vertices[q].Position.Y;
                }
                if (mesh.Vertices[q].Position.Z > Max.Z)
                {
                    Max.Z = mesh.Vertices[q].Position.Z;
                }
            }

            Vector3 dist = Max - Min;

            R           = dist.Length();
            mesh.Center = Min + (dist / 2);
            CalcScaled(scale);
        }