summaryrefslogtreecommitdiff
path: root/NW4RTools/ColladaWriter.cs
diff options
context:
space:
mode:
authorTreeki <treeki@gmail.com>2011-02-12 00:13:55 +0100
committerTreeki <treeki@gmail.com>2011-02-12 00:13:55 +0100
commitc7bfaabd5d2e3a07be51dcc4dd2837a0e8e70e81 (patch)
tree7ed793a4d415b90a566ad9cd933cb2fd522ca7b6 /NW4RTools/ColladaWriter.cs
parent6d779d24736ad2ddb2a95e36a4122886308ecf13 (diff)
downloadnw4rtools-c7bfaabd5d2e3a07be51dcc4dd2837a0e8e70e81.tar.gz
nw4rtools-c7bfaabd5d2e3a07be51dcc4dd2837a0e8e70e81.zip
collada writer now exports basic meshes
Diffstat (limited to '')
-rw-r--r--NW4RTools/ColladaWriter.cs46
1 files changed, 44 insertions, 2 deletions
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<object> ColladaItems = new List<object>();
+
+ 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<node>();
+
+ // 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);
}
}