Esempio n. 1
0
        public Model(Scene scene, string modelDirectory)
        {
            VertexData = new VTX1(scene);
            Joints     = new JNT1(scene);
            Scenegraph = new INF1(scene, Joints);
            Textures   = new TEX1(scene, modelDirectory);
            Materials  = new MAT3(scene, Textures);

            //EVP1 evpFromScene;
            //DRW1 drwFromScene;
            //Shapes = SHP1.Create(scene, Joints.BoneNameIndices, VertexData.Attributes, out evpFromScene, out drwFromScene);

            //SkinningEnvelopes = evpFromScene;
            //PartialWeightData = drwFromScene;

            //foreach (Geometry.Shape shape in Shapes.Shapes)
            //packetCount += shape.Packets.Count;

            vertexCount = VertexData.Attributes.Positions.Count;
        }
Esempio n. 2
0
        public INF1(Scene scene, JNT1 skeleton)
        {
            FlatNodes = new List <SceneNode>();
            Root      = new SceneNode(NodeType.Joint, 0, null);
            FlatNodes.Add(Root);

            for (int i = 0; i < scene.MeshCount; i++)
            {
                SceneNode downNode1 = new SceneNode(NodeType.OpenChild, 0, Root);
                SceneNode matNode   = new SceneNode(NodeType.Material, scene.Meshes[i].MaterialIndex, Root);
                SceneNode downNode2 = new SceneNode(NodeType.OpenChild, 0, Root);
                SceneNode shapeNode = new SceneNode(NodeType.Shape, i, Root);

                FlatNodes.Add(downNode1);
                FlatNodes.Add(matNode);
                FlatNodes.Add(downNode2);
                FlatNodes.Add(shapeNode);
            }

            foreach (Rigging.Bone bone in skeleton.SkeletonRoot.Children)
            {
                SceneNode rootChildDown = new SceneNode(NodeType.OpenChild, 0, Root);
                FlatNodes.Add(rootChildDown);

                GetNodesRecursive(bone, skeleton.FlatSkeleton, Root);

                SceneNode rootChildUp = new SceneNode(NodeType.CloseChild, 0, Root);
                FlatNodes.Add(rootChildUp);
            }

            for (int i = 0; i < scene.MeshCount * 2; i++)
            {
                FlatNodes.Add(new SceneNode(NodeType.CloseChild, 0, Root));
            }

            FlatNodes.Add(new SceneNode(NodeType.Terminator, 0, Root));
        }
Esempio n. 3
0
        public Model(EndianBinaryReader reader)
        {
            int j3d2Magic  = reader.ReadInt32();
            int modelMagic = reader.ReadInt32();

            if (j3d2Magic != 0x4A334432)
            {
                throw new Exception("Model was not a BMD or BDL! (J3D2 magic not found)");
            }
            if ((modelMagic != 0x62646C34) && (modelMagic != 0x626D6433))
            {
                throw new Exception("Model was not a BMD or BDL! (Model type was not bmd3 or bdl4)");
            }

            int modelSize    = reader.ReadInt32();
            int sectionCount = reader.ReadInt32();

            // Skip the dummy section, SVR3
            reader.Skip(16);

            Scenegraph        = new INF1(reader, 32);
            VertexData        = new VTX1(reader, (int)reader.BaseStream.Position);
            SkinningEnvelopes = new EVP1(reader, (int)reader.BaseStream.Position);
            PartialWeightData = new DRW1(reader, (int)reader.BaseStream.Position);
            Joints            = new JNT1(reader, (int)reader.BaseStream.Position);
            Shapes            = SHP1.Create(reader, (int)reader.BaseStream.Position);
            Materials         = new MAT3(reader, (int)reader.BaseStream.Position);
            SkipMDL3(reader);
            Textures = new TEX1(reader, (int)reader.BaseStream.Position);

            foreach (Geometry.Shape shape in Shapes.Shapes)
            {
                packetCount += shape.Packets.Count;
            }

            vertexCount = VertexData.Attributes.Positions.Count;
        }