Exemplo n.º 1
0
        public List <Vertex[]> GetFaces(Faceset faceset, ref bool flip)
        {
            ushort[] indices = ToTriangleList(faceset, ref flip);
            var      faces   = new List <Vertex[]>();

            for (int i = 0; i < indices.Length; i += 3)
            {
                faces.Add(new Vertex[]
                {
                    VerticesA[indices[i + 0]],
                    VerticesA[indices[i + 1]],
                    VerticesA[indices[i + 2]],
                });
            }
            return(faces);
        }
Exemplo n.º 2
0
        public ushort[] ToTriangleList(Faceset faceset, ref bool flip)
        {
            var converted = new List <ushort>();

            for (int i = faceset.StartIndex; i < faceset.StartIndex + faceset.IndexCount - 2; i++)
            {
                ushort vi1 = Indices[i];
                ushort vi2 = Indices[i + 1];
                ushort vi3 = Indices[i + 2];

                if (vi1 == 0xFFFF || vi2 == 0xFFFF || vi3 == 0xFFFF)
                {
                    flip = false;
                }
                else
                {
                    if (vi1 != vi2 && vi1 != vi3 && vi2 != vi3)
                    {
                        if (!flip)
                        {
                            converted.Add(vi1);
                            converted.Add(vi2);
                            converted.Add(vi3);
                        }
                        else
                        {
                            converted.Add(vi3);
                            converted.Add(vi2);
                            converted.Add(vi1);
                        }
                    }
                    flip = !flip;
                }
            }
            return(converted.ToArray());
        }