@@ -1,5 +1,6 @@
using System ;
using System .IO ;
using System .Xml ;
using System .Collections .Generic ;
namespace Crash
@@ -90,5 +91,129 @@ public byte[] ToOBJ()
return stream .ToArray ();
}
}
public byte [] ToCOLLADA ()
{
using (MemoryStream stream = new MemoryStream ())
{
using (StreamWriter textwriter = new StreamWriter (stream ))
using (XmlTextWriter xmlwriter = new XmlTextWriter (textwriter ))
{
xmlwriter .WriteStartDocument ();
xmlwriter .WriteStartElement (" COLLADA" );
xmlwriter .WriteAttributeString (" xmlns" ," http://www.collada.org/2005/11/COLLADASchema" );
xmlwriter .WriteAttributeString (" version" ," 1.4.1" );
xmlwriter .WriteStartElement (" library_geometries" );
xmlwriter .WriteStartElement (" geometry" );
xmlwriter .WriteStartElement (" mesh" );
xmlwriter .WriteStartElement (" source" );
xmlwriter .WriteAttributeString (" id" ," positions" );
xmlwriter .WriteStartElement (" float_array" );
xmlwriter .WriteAttributeString (" id" ," positions-array" );
xmlwriter .WriteAttributeString (" count" ,(vertices .Count * 3 ).ToString ());
foreach (OldSceneryVertex vertex in vertices )
{
xmlwriter .WriteValue (vertex .X );
xmlwriter .WriteWhitespace (" " );
xmlwriter .WriteValue (vertex .Y );
xmlwriter .WriteWhitespace (" " );
xmlwriter .WriteValue (vertex .Z );
xmlwriter .WriteWhitespace (" " );
}
xmlwriter .WriteEndElement ();
xmlwriter .WriteStartElement (" technique_common" );
xmlwriter .WriteStartElement (" accessor" );
xmlwriter .WriteAttributeString (" source" ," #positions-array" );
xmlwriter .WriteAttributeString (" count" ,vertices .Count .ToString ());
xmlwriter .WriteAttributeString (" stride" ," 3" );
xmlwriter .WriteStartElement (" param" );
xmlwriter .WriteAttributeString (" name" ," X" );
xmlwriter .WriteAttributeString (" type" ," float" );
xmlwriter .WriteEndElement ();
xmlwriter .WriteStartElement (" param" );
xmlwriter .WriteAttributeString (" name" ," Y" );
xmlwriter .WriteAttributeString (" type" ," float" );
xmlwriter .WriteEndElement ();
xmlwriter .WriteStartElement (" param" );
xmlwriter .WriteAttributeString (" name" ," Y" );
xmlwriter .WriteAttributeString (" type" ," float" );
xmlwriter .WriteEndElement ();
xmlwriter .WriteEndElement ();
xmlwriter .WriteEndElement ();
xmlwriter .WriteEndElement ();
xmlwriter .WriteStartElement (" source" );
xmlwriter .WriteAttributeString (" id" ," colors" );
xmlwriter .WriteStartElement (" float_array" );
xmlwriter .WriteAttributeString (" id" ," colors-array" );
xmlwriter .WriteAttributeString (" count" ,(vertices .Count * 3 ).ToString ());
foreach (OldSceneryVertex vertex in vertices )
{
xmlwriter .WriteValue (vertex .Red / 256.0 );
xmlwriter .WriteWhitespace (" " );
xmlwriter .WriteValue (vertex .Green / 256.0 );
xmlwriter .WriteWhitespace (" " );
xmlwriter .WriteValue (vertex .Blue / 256.0 );
xmlwriter .WriteWhitespace (" " );
}
xmlwriter .WriteEndElement ();
xmlwriter .WriteStartElement (" technique_common" );
xmlwriter .WriteStartElement (" accessor" );
xmlwriter .WriteAttributeString (" source" ," #colors-array" );
xmlwriter .WriteAttributeString (" count" ,vertices .Count .ToString ());
xmlwriter .WriteAttributeString (" stride" ," 3" );
xmlwriter .WriteStartElement (" param" );
xmlwriter .WriteAttributeString (" name" ," R" );
xmlwriter .WriteAttributeString (" type" ," float" );
xmlwriter .WriteEndElement ();
xmlwriter .WriteStartElement (" param" );
xmlwriter .WriteAttributeString (" name" ," G" );
xmlwriter .WriteAttributeString (" type" ," float" );
xmlwriter .WriteEndElement ();
xmlwriter .WriteStartElement (" param" );
xmlwriter .WriteAttributeString (" name" ," B" );
xmlwriter .WriteAttributeString (" type" ," float" );
xmlwriter .WriteEndElement ();
xmlwriter .WriteEndElement ();
xmlwriter .WriteEndElement ();
xmlwriter .WriteEndElement ();
xmlwriter .WriteStartElement (" vertices" );
xmlwriter .WriteAttributeString (" id" ," vertices" );
xmlwriter .WriteStartElement (" input" );
xmlwriter .WriteAttributeString (" semantic" ," POSITION" );
xmlwriter .WriteAttributeString (" source" ," positions" );
xmlwriter .WriteEndElement ();
xmlwriter .WriteStartElement (" input" );
xmlwriter .WriteAttributeString (" semantic" ," COLOR" );
xmlwriter .WriteAttributeString (" source" ," colors" );
xmlwriter .WriteEndElement ();
xmlwriter .WriteEndElement ();
xmlwriter .WriteStartElement (" triangles" );
xmlwriter .WriteAttributeString (" count" ,polygons .Count .ToString ());
xmlwriter .WriteStartElement (" input" );
xmlwriter .WriteAttributeString (" semantic" ," VERTEX" );
xmlwriter .WriteAttributeString (" source" ," vertices" );
xmlwriter .WriteAttributeString (" offset" ," 0" );
xmlwriter .WriteEndElement ();
xmlwriter .WriteStartElement (" p" );
foreach (OldSceneryPolygon polygon in polygons )
{
xmlwriter .WriteValue (polygon .VertexA );
xmlwriter .WriteWhitespace (" " );
xmlwriter .WriteValue (polygon .VertexB );
xmlwriter .WriteWhitespace (" " );
xmlwriter .WriteValue (polygon .VertexC );
xmlwriter .WriteWhitespace (" " );
}
xmlwriter .WriteEndElement ();
xmlwriter .WriteEndElement ();
xmlwriter .WriteEndElement ();
xmlwriter .WriteEndElement ();
xmlwriter .WriteEndElement ();
xmlwriter .WriteEndElement ();
xmlwriter .WriteEndDocument ();
}
return stream .ToArray ();
}
}
}
}