示例#1
0
        public void LoadModel(MDL0Node model)
        {
            model.Populate();
            model._renderAttribs._renderBones = false;
            model._renderAttribs._renderPolygons = true;
            model._renderAttribs._renderWireframe = false;
            model._renderAttribs._renderVertices = false;
            model.ApplyCHR(null, 0);
            model.ApplySRT(null, 0);

            if (UseExceptions) foreach (string texname in TexturesToDisable) {
                MDL0TextureNode tex = model.TextureGroup.FindChild(texname, false) as MDL0TextureNode;
                if (tex != null) {
                    tex.Enabled = false;
                }
            }

            modelPanel1.ClearAll();
            modelPanel1.AddTarget((IRenderedObject)model);

            if (UseExceptions && PolygonsToDisable.ContainsKey(_charString)) {
                foreach (int polygonNum in PolygonsToDisable[_charString]) {
                    MDL0ObjectNode poly = model.PolygonGroup.FindChild("polygon" + polygonNum, false) as MDL0ObjectNode;
                    if (poly != null) poly.IsRendering = false;
                }
            }

            Box box = model.GetBox();
            Vector3 min = box.Min, max = box.Max;
            if (ZoomOut) {
                min._x += 20;
                max._x -= 20;
            }
            modelPanel1.SetCamWithBox(min, max);
        }
        public static void Serialize(MDL0Node model, string outFile)
        {
            model.Populate();
            model.ApplyCHR(null, 0);

            using (FileStream stream = new FileStream(outFile, FileMode.Create, FileAccess.ReadWrite, FileShare.None, 0x1000, FileOptions.SequentialScan))
            using (XmlWriter writer = XmlWriter.Create(stream, _writerSettings))
            {
                writer.Flush();
                stream.Position = 0;

                writer.WriteStartDocument();
                writer.WriteStartElement("COLLADA", "http://www.collada.org/2008/03/COLLADASchema");
                writer.WriteAttributeString("version", "1.5.0");

                writer.WriteStartElement("asset");
                {
                    writer.WriteStartElement("contributor");
                    writer.WriteElementString("authoring_tool", Application.ProductName);
                    writer.WriteEndElement();

                    writer.WriteStartElement("created");
                    writer.WriteString(DateTime.UtcNow.ToString("s", System.Globalization.CultureInfo.InvariantCulture) + "Z");
                    writer.WriteEndElement();

                    writer.WriteStartElement("modified");
                    writer.WriteString(DateTime.UtcNow.ToString("s", System.Globalization.CultureInfo.InvariantCulture) + "Z");
                    writer.WriteEndElement();

                    writer.WriteStartElement("unit");
                    writer.WriteAttributeString("meter", "0.01");
                    writer.WriteAttributeString("name", "centimeter");
                    writer.WriteEndElement();

                    writer.WriteElementString("up_axis", "Y_UP");
                }
                writer.WriteEndElement();

                //Define images
                WriteImages(model, writer);

                //Define materials
                WriteMaterials(model, writer);

                //Define effects
                WriteEffects(model, writer);

                //Define geometry
                //Create a geometry object for each polygon
                WriteGeometry(model, writer);

                //Define controllers
                //Each weighted polygon needs a controller, which assigns weights to each vertex.
                WriteControllers(model, writer);

                //Define scenes
                writer.WriteStartElement("library_visual_scenes");
                {
                    writer.WriteStartElement("visual_scene");
                    {
                        //Attach nodes/bones to scene, starting with TopN
                        //Specify transform for each node
                        //Weighted polygons must use instance_controller
                        //Standard geometry uses instance_geometry

                        writer.WriteAttributeString("id", "RootNode");
                        writer.WriteAttributeString("name", "RootNode");

                        //Define bones and geometry instances
                        WriteNodes(model, writer);
                    }
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();

                writer.WriteStartElement("scene");
                {
                    writer.WriteStartElement("instance_visual_scene");
                    writer.WriteAttributeString("url", "#RootNode");
                    writer.WriteEndElement(); //instance visual scene
                }
                writer.WriteEndElement(); //scene

                writer.Close();
            }
        }