public bool readMD3Frame(ByteFileReader r) { mins = r.readVec3(); maxs = r.readVec3(); localOrigin = r.readVec3(); radius = r.readFloat(); name = r.readFixedString(16); return(false); }
public void readMD3FrameVerts(ByteFileReader r, int vertexCount) { for (int i = 0; i < vertexCount; i++) { MD3Vertex v = new MD3Vertex(); v.readMD3Vertex(r); verts.Add(v); } }
public bool readMD3Tag(ByteFileReader r) { tagName = r.readFixedString(64); origin = r.readVec3(); this.f = r.readVec3(); this.r = r.readVec3(); this.u = r.readVec3(); return(false); }
public bool readMD3Surface(ByteFileReader r) { long surfaceDataStart = r.getPos(); int ident = r.readInt(); surfName = r.readFixedString(64); flags = r.readInt(); int numFrames = r.readInt(); int numMaterials = r.readInt(); int numVerts = r.readInt(); int numTris = r.readInt(); int ofsTris = r.readInt(); int ofsMaterials = r.readInt(); int ofsTexCoords = r.readInt(); int ofsXYZNormals = r.readInt(); int ofsEnd = r.readInt(); // read material names r.setPos(surfaceDataStart + ofsMaterials); for (int i = 0; i < numMaterials; i++) { string matName = r.readFixedString(64); int dummy = r.readInt(); materials.Add(matName); } // read indices (triangles) r.setPos(surfaceDataStart + ofsTris); for (int i = 0; i < numTris; i++) { int i0 = r.readInt(); int i1 = r.readInt(); int i2 = r.readInt(); indices.Add(i0); indices.Add(i1); indices.Add(i2); } // read texture coordinates r.setPos(surfaceDataStart + ofsTexCoords); for (int i = 0; i < numVerts; i++) { Vec2 tc = r.readVec2(); texCoords.Add(tc); } r.setPos(surfaceDataStart + ofsXYZNormals); // read vertices of all frames for (int i = 0; i < numFrames; i++) { MD3SurfVertsFrame sfVerts = new MD3SurfVertsFrame(); sfVerts.readMD3FrameVerts(r, numVerts); frameVerts.Add(sfVerts); } r.setPos(surfaceDataStart + ofsEnd); return(false); }
public bool loadMD3Model(string fileName) { this.fileName = fileName; ByteFileReader r = new ByteFileReader(); if (r.beginReading(fileName)) { return(true); } char [] ident = new char[4]; r.readCharacters(ident, 4); int version = r.readInt(); internalName = r.readFixedString(64); flags = r.readInt(); int numFrames = r.readInt(); int numTags = r.readInt(); int numSurfs = r.readInt(); int numSkins = r.readInt(); int ofsFrames = r.readInt(); int ofsTags = r.readInt(); int ofsSurfs = r.readInt(); int ofsEnd = r.readInt(); r.setPos(ofsFrames); for (int i = 0; i < numFrames; i++) { MD3Frame f = new MD3Frame(); f.readMD3Frame(r); frames.Add(f); } r.setPos(ofsTags); for (int i = 0; i < numTags; i++) { MD3Tag t = new MD3Tag(); t.readMD3Tag(r); tags.Add(t); } r.setPos(ofsSurfs); for (int i = 0; i < numSurfs; i++) { MD3Surface s = new MD3Surface(); s.readMD3Surface(r); surfaces.Add(s); } return(false); }
public void readMD3Vertex(ByteFileReader r) { short x = r.readShort(); short y = r.readShort(); short z = r.readShort(); xyz = new Vec3(x * 0.015625, y * 0.015625, z * 0.015625); byte lat = r.readByte(); byte lng = r.readByte(); double aLat = lat * (2.0 * Math.PI) / 255.0; double aLng = lng * (2.0 * Math.PI) / 255.0; double nX = Math.Cos(aLat) * Math.Sin(aLng); double nY = Math.Sin(aLat) * Math.Sin(aLng); double nZ = Math.Cos(aLng); normal = new Vec3(nX, nY, nZ); }