Ejemplo n.º 1
0
        private static ThreeDSMesh.FaceGroup ParseFaceData(DataReader3DS dataSegment)
        {
            DataReader3DS subSegment;   // will be used to read other subsegments (do not initialize yet)

            ThreeDSMesh.FaceGroup group = new ThreeDSMesh.FaceGroup();
            group.faces = new ThreeDSMesh.Face[dataSegment.GetUShort()];

            // Read face data
            for (int face = 0; face < group.faces.Length; face++)
            {
                group.faces[face].p1 = dataSegment.GetUShort();
                group.faces[face].p2 = dataSegment.GetUShort();
                group.faces[face].p3 = dataSegment.GetUShort();
                // Ignore flag
                dataSegment.GetUShort();
            }

            // Read other subsegments
            subSegment = dataSegment.GetNextSubSegment();
            while (subSegment != null)
            {
                switch ((ChunkCodes)subSegment.Tag)
                {
                case ChunkCodes.MESH_MATER:     // Name of material used
                    group.mappings.Add(ParseMeshMaterial(subSegment));
                    break;

                case ChunkCodes.TRI_SMOOTH:
                    break;
                }
                subSegment = dataSegment.GetNextSubSegment();
            }

            return(group);
        }
Ejemplo n.º 2
0
        private static ThreeDSMesh.FaceGroup ReadVerticesMESH_FACES(FileStream file, Chunk thischunk)
        {
            ThreeDSMesh.FaceGroup group = new ThreeDSMesh.FaceGroup();
            byte[] buffer = new byte[4];
            file.Read(buffer, 0, 2);
            uint numFaces = BitConverter.ToUInt32(buffer, 0);

            ThreeDSMesh.Face[] faces = new ThreeDSMesh.Face[numFaces];

            int size  = sizeof(ushort);
            int size2 = size * 2;
            int size3 = size * 4;

            buffer = new byte[size3];
            for (int face = 0; face < numFaces; face++)
            {
                file.Read(buffer, 0, size3);

                faces[face].p1 = BitConverter.ToUInt16(buffer, 0);
                faces[face].p2 = BitConverter.ToUInt16(buffer, size);
                faces[face].p3 = BitConverter.ToUInt16(buffer, size2);
            }

            group.faces = faces;

            group.mappings = new List <ThreeDSMesh.MaterialMapping>();
            uint bytesRead = (numFaces * 8) + 8;

            while (bytesRead < thischunk.length)
            {
                Chunk chunk = ReadChunk(file);

                switch ((ChunkCodes)chunk.ID)
                {
                case ChunkCodes.MESH_MATER:
                    group.mappings.Add(ReadMESHMATERIAL(file, chunk));
                    break;

                case ChunkCodes.TRI_SMOOTH:
                    ReadTRI_SMOOTH(file, chunk);
                    break;
                }

                bytesRead += chunk.length;
            }

            return(group);
        }
Ejemplo n.º 3
0
        private static ThreeDSMesh.FaceGroup ParseFaceData(DataReader3DS dataSegment)
        {
            DataReader3DS subSegment;	// will be used to read other subsegments (do not initialize yet)

            ThreeDSMesh.FaceGroup group = new ThreeDSMesh.FaceGroup();
            group.faces = new ThreeDSMesh.Face[dataSegment.GetUShort()];

            // Read face data
            for (int face = 0; face < group.faces.Length; face++)
            {
                group.faces[face].p1 = dataSegment.GetUShort();
                group.faces[face].p2 = dataSegment.GetUShort();
                group.faces[face].p3 = dataSegment.GetUShort();
                // Ignore flag
                dataSegment.GetUShort();
            }

            // Read other subsegments
            subSegment = dataSegment.GetNextSubSegment();
            while (subSegment != null)
            {
                switch ((ChunkCodes)subSegment.Tag)
                {
                    case ChunkCodes.MESH_MATER:	// Name of material used
                        group.mappings.Add(ParseMeshMaterial(subSegment));
                        break;
                    case ChunkCodes.TRI_SMOOTH:
                        break;
                }
                subSegment = dataSegment.GetNextSubSegment();
            }

            return group;
        }