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