From c7bfaabd5d2e3a07be51dcc4dd2837a0e8e70e81 Mon Sep 17 00:00:00 2001 From: Treeki Date: Sat, 12 Feb 2011 00:13:55 +0100 Subject: collada writer now exports basic meshes --- NW4RTools/ColladaWriter.cs | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) (limited to 'NW4RTools/ColladaWriter.cs') diff --git a/NW4RTools/ColladaWriter.cs b/NW4RTools/ColladaWriter.cs index 85b6867..60a3a75 100644 --- a/NW4RTools/ColladaWriter.cs +++ b/NW4RTools/ColladaWriter.cs @@ -18,6 +18,7 @@ namespace NW4RTools { COLLADA Collada; library_geometries LibGeometries; + library_visual_scenes LibVisualScenes; private ColladaWriter(ResFile file) { CurrentFile = file; @@ -39,8 +40,10 @@ namespace NW4RTools { Collada.asset.unit.meter = 1.0; Collada.asset.up_axis = UpAxisType.Y_UP; - Collada.Items = new object[1]; - Collada.Items[0] = LibGeometries = new library_geometries(); + List ColladaItems = new List(); + + LibGeometries = new library_geometries(); + ColladaItems.Add(LibGeometries); LibGeometries.geometry = new geometry[CurrentModel.Shapes.Count]; @@ -208,6 +211,7 @@ namespace NW4RTools { // Ok, we've written all the raw float data, now set up vertices + // TODO: Vertex colours m.vertices = new vertices(); m.vertices.id = String.Format("{0}-lib-Vertex", kv.Key); m.vertices.input = new InputLocal[1]; @@ -337,6 +341,44 @@ namespace NW4RTools { geoIndex += 1; } + + + // SHAPES ARE DONE. + // Next up: Visual Scenes (I will just create one atm) + + LibVisualScenes = new library_visual_scenes(); + ColladaItems.Add(LibVisualScenes); + + LibVisualScenes.visual_scene = new visual_scene[1]; + var mainScene = LibVisualScenes.visual_scene[0] = new visual_scene(); + + // TODO: Change this so it doesn't have the possibility of name collisions with shapes + mainScene.id = "RootNode"; + mainScene.name = "RootNode"; + var mainSceneNodeList = new List(); + + // Right now: just make a node for each shape. + foreach (var kv in CurrentModel.Shapes) { + var thisNode = new node(); + + thisNode.id = kv.Key; + thisNode.name = kv.Key; + thisNode.instance_geometry = new instance_geometry[1]; + thisNode.instance_geometry[0] = new instance_geometry(); + thisNode.instance_geometry[0].url = String.Format("#{0}-lib", kv.Key); + + mainSceneNodeList.Add(thisNode); + } + + mainScene.node = mainSceneNodeList.ToArray(); + + + // Finally, create a scene + Collada.scene = new COLLADAScene(); + Collada.scene.instance_visual_scene = new InstanceWithExtra(); + Collada.scene.instance_visual_scene.url = "#RootNode"; + + Collada.Items = ColladaItems.ToArray(); Collada.Save(outputStream); } } -- cgit v1.2.3