Example #1
0
        private void BuildFace(LevelVBWriter writer, Cb4aLevelVBSubcluster sub, ref CIwVec3 mins, ref CIwVec3 maxs, BspGeometryFace f)
        {
            while (f.Vertex0.UV0.X >= 8 || f.Vertex1.UV0.X >= 8 || f.Vertex2.UV0.X >= 8)
            {
                f.Vertex0.UV0.X -= 1;
                f.Vertex1.UV0.X -= 1;
                f.Vertex2.UV0.X -= 1;
            }
            while (f.Vertex0.UV0.Y >= 8 || f.Vertex1.UV0.Y >= 8 || f.Vertex2.UV0.Y >= 8)
            {
                f.Vertex0.UV0.Y -= 1;
                f.Vertex1.UV0.Y -= 1;
                f.Vertex2.UV0.Y -= 1;
            }
            if (f.Vertex0.UV0.X < -8) f.Vertex0.UV0.X = -8;
            if (f.Vertex1.UV0.X < -8) f.Vertex1.UV0.X = -8;
            if (f.Vertex2.UV0.X < -8) f.Vertex2.UV0.X = -8;
            if (f.Vertex0.UV0.Y < -8) f.Vertex0.UV0.Y = -8;
            if (f.Vertex1.UV0.Y < -8) f.Vertex1.UV0.Y = -8;
            if (f.Vertex2.UV0.Y < -8) f.Vertex2.UV0.Y = -8;

            if (f.Vertex0.Position.X < mins.x) mins.x = (int)f.Vertex0.Position.X;
            if (f.Vertex1.Position.X < mins.x) mins.x = (int)f.Vertex1.Position.X;
            if (f.Vertex2.Position.X < mins.x) mins.x = (int)f.Vertex2.Position.X;
            if (f.Vertex0.Position.Y < mins.y) mins.y = (int)f.Vertex0.Position.Y;
            if (f.Vertex1.Position.Y < mins.y) mins.y = (int)f.Vertex1.Position.Y;
            if (f.Vertex2.Position.Y < mins.y) mins.y = (int)f.Vertex2.Position.Y;
            if (f.Vertex0.Position.Z < mins.z) mins.z = (int)f.Vertex0.Position.Z;
            if (f.Vertex1.Position.Z < mins.z) mins.z = (int)f.Vertex1.Position.Z;
            if (f.Vertex2.Position.Z < mins.z) mins.z = (int)f.Vertex2.Position.Z;

            if (f.Vertex0.Position.X > maxs.x) maxs.x = (int)f.Vertex0.Position.X;
            if (f.Vertex1.Position.X > maxs.x) maxs.x = (int)f.Vertex1.Position.X;
            if (f.Vertex2.Position.X > maxs.x) maxs.x = (int)f.Vertex2.Position.X;
            if (f.Vertex0.Position.Y > maxs.y) maxs.y = (int)f.Vertex0.Position.Y;
            if (f.Vertex1.Position.Y > maxs.y) maxs.y = (int)f.Vertex1.Position.Y;
            if (f.Vertex2.Position.Y > maxs.y) maxs.y = (int)f.Vertex2.Position.Y;
            if (f.Vertex0.Position.Z > maxs.z) maxs.z = (int)f.Vertex0.Position.Z;
            if (f.Vertex1.Position.Z > maxs.z) maxs.z = (int)f.Vertex1.Position.Z;
            if (f.Vertex2.Position.Z > maxs.z) maxs.z = (int)f.Vertex2.Position.Z;

            var index0 = writer.Write(GetLevelVBItem(f.Vertex0));
            var index1 = writer.Write(GetLevelVBItem(f.Vertex1));
            var index2 = writer.Write(GetLevelVBItem(f.Vertex2));
            if ((index0 == index1) || (index0 == index2) || (index2 == index1))
                return;
            sub.Indices.Add(index2);
            sub.Indices.Add(index1);
            sub.Indices.Add(index0);
        }