Пример #1
0
        internal RotatonKey newRotationKey()
        {
            RotatonKey key = new RotatonKey();

            rotations.Add(key);
            return(key);
        }
Пример #2
0
            private void readRotationFrame(Bone bone)
            {
                string textcount = readLine();
                int    count     = int.Parse(textcount);

                for (int frameId = 0; frameId < count; ++frameId)
                {
                    string[]   data = readLine().Split(" ".ToCharArray());
                    RotatonKey key  = bone.newRotationKey();
                    key.time = math1.ParseFloat(data[0]);
                    key.x    = math1.ParseFloat(data[1]);
                    key.y    = math1.ParseFloat(data[2]);
                    key.z    = math1.ParseFloat(data[3]);
                }
            }
Пример #3
0
        private static Model ExtractModel(Runner run)
        {
            Model model = new Model();

            model.framecount   = run.framecount;
            model.currentFrame = run.current;

            foreach (MS3DMaterial s in run.materials)
            {
                Material mat = model.newMaterial();
                mat.name = AsString(s.name);
                copyToColor(mat.ambient, s.ambient);
                copyToColor(mat.diffuse, s.diffuse);
                copyToColor(mat.specular, s.specular);
                copyToColor(mat.emissive, s.emissive);
                mat.shininess      = s.shininess;
                mat.transperency   = s.transparency;
                mat.diffuseTexture = AsString(s.texture);
                mat.alphatexture   = AsString(s.alphamap);
            }

            foreach (MeshGroup g in run.groups)
            {
                Mesh m = model.newMesh();
                m.materialId = g.material;
                foreach (int tr in g.tri)
                {
                    MS3DTriangle tri = run.triangles[tr];
                    int[]        vid = new int[3];
                    int[]        nid = new int[3];

                    for (int i = 0; i < 3; ++i)
                    {
                        vid[i] = m.vertices.Count;
                        nid[i] = m.normals.Count;

                        Normal norm = m.newNormal();
                        norm.x = tri.vertexNormals[i + 0];
                        norm.y = tri.vertexNormals[i + 1];
                        norm.z = tri.vertexNormals[i + 2];

                        MS3DVertex v   = run.vertices[tri.vertexIndices[i]];
                        Vertex     ver = m.newVertex();
                        ver.u    = tri.s[i];
                        ver.v    = tri.t[i];
                        ver.bone = v.boneID;
                        ver.x    = v.vertex[0];
                        ver.y    = v.vertex[1];
                        ver.z    = v.vertex[2];
                    }

                    Tri t = m.newTri();
                    t.n1 = nid[0];
                    t.n2 = nid[1];
                    t.n3 = nid[2];
                    t.v1 = vid[0];
                    t.v2 = vid[1];
                    t.v3 = vid[2];
                }
            }

            foreach (Joint j in run.joints)
            {
                Bone b = model.newBone();
                b.parentName = AsString(j.joint.parentName);
                b.name       = AsString(j.joint.name);
                b.rx         = j.joint.rotation[0];
                b.ry         = j.joint.rotation[1];
                b.rz         = j.joint.rotation[2];
                b.x          = j.joint.translation[0];
                b.y          = j.joint.translation[1];
                b.z          = j.joint.translation[2];

                foreach (MS3DKeyframe r in j.rotations)
                {
                    RotatonKey k = b.newRotationKey();
                    k.time = r.time * run.animfps;
                    k.x    = r.parameter[0];
                    k.y    = r.parameter[1];
                    k.z    = r.parameter[2];
                }

                foreach (MS3DKeyframe t in j.translations)
                {
                    PositionKey k = b.newPositionKey();
                    k.time = t.time * run.animfps;
                    k.x    = t.parameter[0];
                    k.y    = t.parameter[1];
                    k.z    = t.parameter[2];
                }
            }

            model.mapBonesToId();
            return(model);
        }