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); }
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); }
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; }