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