コード例 #1
0
 public bool readMD3Frame(ByteFileReader r)
 {
     mins        = r.readVec3();
     maxs        = r.readVec3();
     localOrigin = r.readVec3();
     radius      = r.readFloat();
     name        = r.readFixedString(16);
     return(false);
 }
コード例 #2
0
 public void readMD3FrameVerts(ByteFileReader r, int vertexCount)
 {
     for (int i = 0; i < vertexCount; i++)
     {
         MD3Vertex v = new MD3Vertex();
         v.readMD3Vertex(r);
         verts.Add(v);
     }
 }
コード例 #3
0
 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);
 }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }