Open Game Engine Exchange (OpenGEX)

Comparison of OpenGEX and Collada

This page illustrates the differences between the OpenGEX and Collada file formats by first enumerating some of the issues that motivated the creation of the OpenGEX format in the first place and then by showing a side-by-side comparison of a couple OpenGEX and Collada files.

The design of OpenGEX was influenced by the fact that there were several things in Collada that were either missing entirely, insufficient in some way, or underdocumented to the point that supporting the format required too much guesswork. Many of these issues are described in the following list.

Below are two examples that show side-by-side comparisons of real OpenGEX and Collada files for a static scene and an animated scene.

Static scene

In the first example, a simple scene containing two instances of the same box was created in 3D Studio Max 2014 and exported to the files shown below. The box has a simple material, and there is no animation.

OpenGEX

This is the file written by the OpenGEX export plugin. Most of the floating-point data is written as hex literals to ensure exact bit-for-bit reconstruction when the file is imported into another program. (Lossless data transmission is not guaranteed when floating-point data is converted to decimal.)

Collada

This is the same scene written to the Collada format. The Autodesk Collada exporter did not correctly export the boxes as two instances of the same object, but instead as two separate boxes with independent geometric data, so this file has been hand-edited to reflect the correct scene structure for an apples-to-apples comparison. Some extraneous information (such as a black emission color) has also been removed so that the data content is the same in both files.

Metric (key = "distance") {float {1}}
Metric (key = "angle") {float {1}}
Metric (key = "time") {float {1}}
Metric (key = "up") {string {"z"}}

GeometryNode $node1
{
	Name {string {"Box001"}}
	ObjectRef {ref {$geometry1}}
	MaterialRef {ref {$material1}}

	Transform
	{
		float[16]
		{
			{0x3F800000, 0x00000000, 0x00000000, 0x00000000,		// {1, 0, 0, 0
			 0x00000000, 0x3F800000, 0x00000000, 0x00000000,		//  0, 1, 0, 0
			 0x00000000, 0x00000000, 0x3F800000, 0x00000000,		//  0, 0, 1, 0
			 0xBEF33B00, 0x411804DE, 0x00000000, 0x3F800000}		//  -0.47506, 9.50119, 0, 1}
		}
	}
}

GeometryNode $node2
{
	Name {string {"Box002"}}
	ObjectRef {ref {$geometry1}}
	MaterialRef {ref {$material1}}

	Transform
	{
		float[16]
		{
			{0x3F800000, 0x00000000, 0x00000000, 0x00000000,		// {1, 0, 0, 0
			 0x00000000, 0x3F800000, 0x00000000, 0x00000000,		//  0, 1, 0, 0
			 0x00000000, 0x00000000, 0x3F800000, 0x00000000,		//  0, 0, 1, 0
			 0x43041438, 0x411804DE, 0x00000000, 0x3F800000}		//  132.079, 9.50119, 0, 1}
		}
	}
}

GeometryObject $geometry1		// Box001, Box002
{
	Mesh (primitive = "triangles")
	{
		VertexArray (attrib = "position")
		{
			float[3]		// 24
			{
				{0xC2501375, 0xC24C468A, 0x00000000}, {0xC2501375, 0x424C468A, 0x00000000}, {0x42501375, 0x424C468A, 0x00000000}, {0x42501375, 0xC24C468A, 0x00000000}, {0xC2501375, 0xC24C468A, 0x42BA3928}, {0x42501375, 0xC24C468A, 0x42BA3928}, {0x42501375, 0x424C468A, 0x42BA3928}, {0xC2501375, 0x424C468A, 0x42BA3928},
				{0xC2501375, 0xC24C468A, 0x00000000}, {0x42501375, 0xC24C468A, 0x00000000}, {0x42501375, 0xC24C468A, 0x42BA3928}, {0xC2501375, 0xC24C468A, 0x42BA3928}, {0x42501375, 0xC24C468A, 0x00000000}, {0x42501375, 0x424C468A, 0x00000000}, {0x42501375, 0x424C468A, 0x42BA3928}, {0x42501375, 0xC24C468A, 0x42BA3928},
				{0x42501375, 0x424C468A, 0x00000000}, {0xC2501375, 0x424C468A, 0x00000000}, {0xC2501375, 0x424C468A, 0x42BA3928}, {0x42501375, 0x424C468A, 0x42BA3928}, {0xC2501375, 0x424C468A, 0x00000000}, {0xC2501375, 0xC24C468A, 0x00000000}, {0xC2501375, 0xC24C468A, 0x42BA3928}, {0xC2501375, 0x424C468A, 0x42BA3928}
			}
		}

		VertexArray (attrib = "normal")
		{
			float[3]		// 24
			{
				{0x00000000, 0x00000000, 0xBF800000}, {0x00000000, 0x00000000, 0xBF800000}, {0x00000000, 0x00000000, 0xBF800000}, {0x00000000, 0x00000000, 0xBF800000}, {0x00000000, 0x00000000, 0x3F800000}, {0x00000000, 0x00000000, 0x3F800000}, {0x00000000, 0x00000000, 0x3F800000}, {0x00000000, 0x00000000, 0x3F800000},
				{0x00000000, 0xBF800000, 0x00000000}, {0x00000000, 0xBF800000, 0x00000000}, {0x00000000, 0xBF800000, 0x00000000}, {0x80000000, 0xBF800000, 0x00000000}, {0x3F800000, 0x00000000, 0x00000000}, {0x3F800000, 0x00000000, 0x00000000}, {0x3F800000, 0x00000000, 0x00000000}, {0x3F800000, 0x00000000, 0x00000000},
				{0x00000000, 0x3F800000, 0x00000000}, {0x00000000, 0x3F800000, 0x00000000}, {0x00000000, 0x3F800000, 0x00000000}, {0x80000000, 0x3F800000, 0x00000000}, {0xBF800000, 0x00000000, 0x00000000}, {0xBF800000, 0x00000000, 0x00000000}, {0xBF800000, 0x00000000, 0x00000000}, {0xBF800000, 0x00000000, 0x00000000}
			}
		}

		VertexArray (attrib = "texcoord")
		{
			float[2]		// 24
			{
				{0x3F800000, 0x00000000}, {0x3F800000, 0x3F800000}, {0x00000000, 0x3F800000}, {0x00000000, 0x00000000}, {0x00000000, 0x00000000}, {0x3F800000, 0x00000000}, {0x3F800000, 0x3F800000}, {0x00000000, 0x3F800000},
				{0x00000000, 0x00000000}, {0x3F800000, 0x00000000}, {0x3F800000, 0x3F800000}, {0x00000000, 0x3F800000}, {0x00000000, 0x00000000}, {0x3F800000, 0x00000000}, {0x3F800000, 0x3F800000}, {0x00000000, 0x3F800000},
				{0x00000000, 0x00000000}, {0x3F800000, 0x00000000}, {0x3F800000, 0x3F800000}, {0x00000000, 0x3F800000}, {0x00000000, 0x00000000}, {0x3F800000, 0x00000000}, {0x3F800000, 0x3F800000}, {0x00000000, 0x3F800000}
			}
		}

		IndexArray
		{
			unsigned_int32[3]		// 12
			{
				{0, 1, 2}, {2, 3, 0}, {4, 5, 6}, {6, 7, 4}, {8, 9, 10}, {10, 11, 8}, {12, 13, 14}, {14, 15, 12}, {16, 17, 18}, {18, 19, 16}, {20, 21, 22}, {22, 23, 20}
			}
		}
	}
}

Material $material1
{
	Name {string {"03 - Default"}}

	Color (attrib = "diffuse") {float[3] {{0.588235, 0.588235, 0.588235}}}
	Texture (attrib = "diffuse")
	{
		string {"texture/Concrete.tga"}
	}
}
<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
	<asset>
		<unit meter="1.000000" name="centimeter"></unit>
		<up_axis>Z_UP</up_axis>
	</asset>
	<library_images>
		<image id="Map #0-image" name="Map #0">
			<init_from>file://texture\Concrete.tga</init_from>
		</image>
	</library_images>
	<library_materials>
		<material id="_03 - Default" name="_03 - Default">
			<instance_effect url="#_03 - Default-fx"/>
		</material>
	</library_materials>
	<library_effects>
		<effect id="_03 - Default-fx" name="_03 - Default">
			<profile_COMMON>
				<technique sid="standard">
					<phong>
						<ambient>
							<color sid="ambient">0.588235 0.588235 0.588235 1.000000</color>
						</ambient>
						<diffuse>
							<texture texture="Map #0-image" texcoord="CHANNEL0"></texture>
						</diffuse>
					</phong>
				</technique>
			</profile_COMMON>
		</effect>
	</library_effects>
	<library_geometries>
		<geometry id="Box001-lib" name="Box001Mesh">
			<mesh>
				<source id="Box001-POSITION">
					<float_array id="Box001-POSITION-array" count="24">
						-52.019001 -51.068886 0.000000 52.019001 -51.068886 0.000000 -52.019001 51.068886 0.000000 52.019001 51.068886 0.000000
						-52.019001 -51.068886 93.111633 52.019001 -51.068886 93.111633 -52.019001 51.068886 93.111633 52.019001 51.068886 93.111633
					</float_array>
					<technique_common>
						<accessor source="#Box001-POSITION-array" count="8" stride="3">
							<param name="X" type="float"/>
							<param name="Y" type="float"/>
							<param name="Z" type="float"/>
						</accessor>
					</technique_common>
				</source>
				<source id="Box001-Normal0">
					<float_array id="Box001-Normal0-array" count="108">
						0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000
						0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000
						0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000
						1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000
						0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000
						-1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000
					</float_array>
					<technique_common>
						<accessor source="#Box001-Normal0-array" count="36" stride="3">
							<param name="X" type="float"/>
							<param name="Y" type="float"/>
							<param name="Z" type="float"/>
						</accessor>
					</technique_common>
				</source>
				<source id="Box001-UV0">
					<float_array id="Box001-UV0-array" count="48">
						1.000000 0.000000 0.000000 0.000000 1.000000 1.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 1.000000 1.000000
						0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 1.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 1.000000 1.000000
						0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 1.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 1.000000 1.000000
					</float_array>
					<technique_common>
						<accessor source="#Box001-UV0-array" count="24" stride="2">
							<param name="S" type="float"/>
							<param name="T" type="float"/>
						</accessor>
					</technique_common>
				</source>
				<vertices id="Box001-VERTEX">
					<input semantic="POSITION" source="#Box001-POSITION"/>
				</vertices>
				<triangles count="12" material="_03 - Default">
					<input semantic="VERTEX" offset="0" source="#Box001-VERTEX"/>
					<input semantic="NORMAL" offset="1" source="#Box001-Normal0"/>
					<input semantic="TEXCOORD" offset="2" set="0" source="#Box001-UV0"/>
					<p>
						1 0 1 0 1 0 3 2 3 0 3 0 2 4 2 3 5 3 7 6 7 6 7 6 4 8 4 7 9 7 4 10 4 5 11 5 5 12 11 4 13 10 0 14 8 5 15 11 0 16 8 1 17 9 7 18 15 5 19 14
						1 20 12 7 21 15 1 22 12 3 23 13 6 24 19 7 25 18 3 26 16 6 27 19 3 28 16 2 29 17 4 30 23 6 31 22 2 32 20 4 33 23 2 34 20 0 35 21
					</p>
				</triangles>
			</mesh>
		</geometry>
	</library_geometries>
	<library_visual_scenes>
		<visual_scene id="Test" name="Test">
			<node name="Box001" id="Box001" sid="Box001">
				<matrix sid="matrix">
					1.000000 0.000000 0.000000 -0.475060
					0.000000 1.000000 0.000000 9.501188
					0.000000 0.000000 1.000000 0.000000
					0.000000 0.000000 0.000000 1.000000
				</matrix>
				<instance_geometry url="#Box001-lib">
					<bind_material>
						<technique_common>
							<instance_material symbol="_03 - Default" target="#_03 - Default"/>
						</technique_common>
					</bind_material>
				</instance_geometry>
			</node>
			<node name="Box002" id="Box002" sid="Box002">
				<matrix sid="matrix">
					1.000000 0.000000 0.000000 132.078979
					0.000000 1.000000 0.000000 9.501188
					0.000000 0.000000 1.000000 0.000000
					0.000000 0.000000 0.000000 1.000000
				</matrix>
				<instance_geometry url="#Box001-lib">
					<bind_material>
						<technique_common>
							<instance_material symbol="_03 - Default" target="#_03 - Default"/>
						</technique_common>
					</bind_material>
				</instance_geometry>
			</node>
		</visual_scene>
	</library_visual_scenes>
	<scene>
		<instance_visual_scene url="#Test"></instance_visual_scene>
	</scene>
</COLLADA>

Animated scene

In the second example, a scene containing a single animated box was created in 3D Studio Max 2014 and exported to the files shown below. The animation moves the box along the x axis while rotating it, and then moves the box along the z axis.

OpenGEX

This is the file written by the OpenGEX export plugin. Note that animation data is stored together with the items that are animated, as opposed to a separate location.

Collada

This is the same scene written to the Collada format. Even though it is considerably longer than the OpenGEX file, it contains exactly the same information. The Autodesk Collada exporter included several unnecessary animation tracks that contained no actual motion, and these have been removed to provide an apples-to-apples comparison.

Metric (key = "distance") {float {1}}
Metric (key = "angle") {float {1}}
Metric (key = "time") {float {1}}
Metric (key = "up") {string {"z"}}

GeometryNode $node1
{
	Name {string {"Box001"}}
	ObjectRef {ref {$geometry1}}
	MaterialRef {ref {$material1}}

	Translation %xpos (kind = "x")
	{
		float {0xBEF33B00}		// -0.47506
	}

	Translation %ypos (kind = "y")
	{
		float {0x41180000}		// 9.5
	}

	Translation %zpos (kind = "z")
	{
		float {0x00000000}		// 0
	}

	Rotation %zrot (kind = "z")
	{
		float {0x00000000}		// 0
	}

	Rotation %yrot (kind = "y")
	{
		float {0x80000000}		// -0
	}

	Rotation %xrot (kind = "x")
	{
		float {0x00000000}		// 0
	}

	Animation (begin = 0, end = 1)
	{
		Track (target = %xpos)
		{
			Time (curve = "bezier")
			{
				Key {float {0, 0.666667, 1}}
				Key (kind = "-control") {float {0, 0.444467, 0.8889}}
				Key (kind = "+control") {float {0.2222, 0.777767, 1}}
			}

			Value (curve = "bezier")
			{
				Key {float {-0.47506, 413.657, 413.657}}
				Key (kind = "-control") {float {-0.47506, 413.657, 413.657}}
				Key (kind = "+control") {float {-0.47506, 413.657, 413.657}}
			}
		}

		Track (target = %zpos)
		{
			Time (curve = "bezier")
			{
				Key {float {0, 0.666667, 1}}
				Key (kind = "-control") {float {0, 0.444467, 0.8889}}
				Key (kind = "+control") {float {0.2222, 0.777767, 1}}
			}

			Value (curve = "bezier")
			{
				Key {float {0, 0, 158.682}}
				Key (kind = "-control") {float {0, 0, 158.682}}
				Key (kind = "+control") {float {0, 0, 158.682}}
			}
		}

		Track (target = %zrot)
		{
			Time (curve = "bezier")
			{
				Key {float {0, 0.666667, 1}}
				Key (kind = "-control") {float {0, 0.444467, 0.8889}}
				Key (kind = "+control") {float {0.2222, 0.777767, 1}}
			}

			Value (curve = "bezier")
			{
				Key {float {0, 3.14582, 3.14582}}
				Key (kind = "-control") {float {0, 3.14582, 3.14582}}
				Key (kind = "+control") {float {0, 3.14582, 3.14582}}
			}
		}
	}
}

GeometryObject $geometry1		// Box001
{
	Mesh (primitive = "triangles")
	{
		VertexArray (attrib = "position")
		{
			float[3]		// 24
			{
				{0xC2501375, 0xC24C468A, 0x00000000}, {0xC2501375, 0x424C468A, 0x00000000}, {0x42501375, 0x424C468A, 0x00000000}, {0x42501375, 0xC24C468A, 0x00000000}, {0xC2501375, 0xC24C468A, 0x42BA3928}, {0x42501375, 0xC24C468A, 0x42BA3928}, {0x42501375, 0x424C468A, 0x42BA3928}, {0xC2501375, 0x424C468A, 0x42BA3928},
				{0xC2501375, 0xC24C468A, 0x00000000}, {0x42501375, 0xC24C468A, 0x00000000}, {0x42501375, 0xC24C468A, 0x42BA3928}, {0xC2501375, 0xC24C468A, 0x42BA3928}, {0x42501375, 0xC24C468A, 0x00000000}, {0x42501375, 0x424C468A, 0x00000000}, {0x42501375, 0x424C468A, 0x42BA3928}, {0x42501375, 0xC24C468A, 0x42BA3928},
				{0x42501375, 0x424C468A, 0x00000000}, {0xC2501375, 0x424C468A, 0x00000000}, {0xC2501375, 0x424C468A, 0x42BA3928}, {0x42501375, 0x424C468A, 0x42BA3928}, {0xC2501375, 0x424C468A, 0x00000000}, {0xC2501375, 0xC24C468A, 0x00000000}, {0xC2501375, 0xC24C468A, 0x42BA3928}, {0xC2501375, 0x424C468A, 0x42BA3928}
			}
		}

		VertexArray (attrib = "normal")
		{
			float[3]		// 24
			{
				{0x00000000, 0x00000000, 0xBF800000}, {0x00000000, 0x00000000, 0xBF800000}, {0x00000000, 0x00000000, 0xBF800000}, {0x00000000, 0x00000000, 0xBF800000}, {0x00000000, 0x00000000, 0x3F800000}, {0x00000000, 0x00000000, 0x3F800000}, {0x00000000, 0x00000000, 0x3F800000}, {0x00000000, 0x00000000, 0x3F800000},
				{0x00000000, 0xBF800000, 0x00000000}, {0x00000000, 0xBF800000, 0x00000000}, {0x00000000, 0xBF800000, 0x00000000}, {0x80000000, 0xBF800000, 0x00000000}, {0x3F800000, 0x00000000, 0x00000000}, {0x3F800000, 0x00000000, 0x00000000}, {0x3F800000, 0x00000000, 0x00000000}, {0x3F800000, 0x00000000, 0x00000000},
				{0x00000000, 0x3F800000, 0x00000000}, {0x00000000, 0x3F800000, 0x00000000}, {0x00000000, 0x3F800000, 0x00000000}, {0x80000000, 0x3F800000, 0x00000000}, {0xBF800000, 0x00000000, 0x00000000}, {0xBF800000, 0x00000000, 0x00000000}, {0xBF800000, 0x00000000, 0x00000000}, {0xBF800000, 0x00000000, 0x00000000}
			}
		}

		VertexArray (attrib = "texcoord")
		{
			float[2]		// 24
			{
				{0x3F800000, 0x00000000}, {0x3F800000, 0x3F800000}, {0x00000000, 0x3F800000}, {0x00000000, 0x00000000}, {0x00000000, 0x00000000}, {0x3F800000, 0x00000000}, {0x3F800000, 0x3F800000}, {0x00000000, 0x3F800000},
				{0x00000000, 0x00000000}, {0x3F800000, 0x00000000}, {0x3F800000, 0x3F800000}, {0x00000000, 0x3F800000}, {0x00000000, 0x00000000}, {0x3F800000, 0x00000000}, {0x3F800000, 0x3F800000}, {0x00000000, 0x3F800000},
				{0x00000000, 0x00000000}, {0x3F800000, 0x00000000}, {0x3F800000, 0x3F800000}, {0x00000000, 0x3F800000}, {0x00000000, 0x00000000}, {0x3F800000, 0x00000000}, {0x3F800000, 0x3F800000}, {0x00000000, 0x3F800000}
			}
		}

		IndexArray
		{
			unsigned_int32[3]		// 12
			{
				{0, 1, 2}, {2, 3, 0}, {4, 5, 6}, {6, 7, 4}, {8, 9, 10}, {10, 11, 8}, {12, 13, 14}, {14, 15, 12}, {16, 17, 18}, {18, 19, 16}, {20, 21, 22}, {22, 23, 20}
			}
		}
	}
}

Material $material1
{
	Name {string {"03 - Default"}}

	Color (attrib = "diffuse") {float[3] {{0.588235, 0.588235, 0.588235}}}
	Texture (attrib = "diffuse")
	{
		string {"texture/Concrete.tga"}
	}
}
<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
	<asset>
		<unit meter="1.000000" name="centimeter"></unit>
		<up_axis>Z_UP</up_axis>
	</asset>
	<library_images>
		<image id="Map #0-image" name="Map #0">
			<init_from>file://texture\Concrete.tga</init_from>
		</image>
	</library_images>
	<library_materials>
		<material id="_03 - Default" name="_03 - Default">
			<instance_effect url="#_03 - Default-fx"/>
		</material>
	</library_materials>
	<library_effects>
		<effect id="_03 - Default-fx" name="_03 - Default">
			<profile_COMMON>
				<technique sid="standard">
					<phong>
						<ambient>
							<color sid="ambient">0.588235 0.588235 0.588235 1.000000</color>
						</ambient>
						<diffuse>
							<texture texture="Map #0-image" texcoord="CHANNEL0"></texture>
						</diffuse>
					</phong>
				</technique>
			</profile_COMMON>
		</effect>
	</library_effects>
	<library_geometries>
		<geometry id="Box001-lib" name="Box001Mesh">
			<mesh>
				<source id="Box001-POSITION">
					<float_array id="Box001-POSITION-array" count="24">
						-52.019001 -51.068886 0.000000 52.019001 -51.068886 0.000000 -52.019001 51.068886 0.000000 52.019001 51.068886 0.000000
						-52.019001 -51.068886 93.111633 52.019001 -51.068886 93.111633 -52.019001 51.068886 93.111633 52.019001 51.068886 93.111633
					</float_array>
					<technique_common>
						<accessor source="#Box001-POSITION-array" count="8" stride="3">
							<param name="X" type="float"/>
							<param name="Y" type="float"/>
							<param name="Z" type="float"/>
						</accessor>
					</technique_common>
				</source>
				<source id="Box001-Normal0">
					<float_array id="Box001-Normal0-array" count="108">
						0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000
						0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000
						0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000
						0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000
						0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000
						1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000
						0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000
						0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000
						-1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000
					</float_array>
					<technique_common>
						<accessor source="#Box001-Normal0-array" count="36" stride="3">
							<param name="X" type="float"/>
							<param name="Y" type="float"/>
							<param name="Z" type="float"/>
						</accessor>
					</technique_common>
				</source>
				<source id="Box001-UV0">
					<float_array id="Box001-UV0-array" count="48">
						1.000000 0.000000 0.000000 0.000000 1.000000 1.000000 0.000000 1.000000
						0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 1.000000 1.000000
						0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 1.000000 1.000000
						0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 1.000000 1.000000
						0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 1.000000 1.000000
						0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 1.000000 1.000000
					</float_array>
					<technique_common>
						<accessor source="#Box001-UV0-array" count="24" stride="2">
							<param name="S" type="float"/>
							<param name="T" type="float"/>
						</accessor>
					</technique_common>
				</source>
				<vertices id="Box001-VERTEX">
					<input semantic="POSITION" source="#Box001-POSITION"/>
				</vertices>
				<triangles count="12" material="_03 - Default">
					<input semantic="VERTEX" offset="0" source="#Box001-VERTEX"/>
					<input semantic="NORMAL" offset="1" source="#Box001-Normal0"/>
					<input semantic="TEXCOORD" offset="2" set="0" source="#Box001-UV0"/>
					<p>
						1 0 1 0 1 0 3 2 3 0 3 0 2 4 2 3 5 3 7 6 7 6 7 6 4 8 4 7 9 7 4 10 4 5 11 5 5 12 11 4 13 10 0 14 8 5 15 11 0 16 8 1 17 9 7
						18 15 5 19 14 1 20 12 7 21 15 1 22 12 3 23 13 6 24 19 7 25 18 3 26 16 6 27 19 3 28 16 2 29 17 4 30 23 6 31 22 2 32 20 4 33 23 2 34 20 0 35 21
					</p>
				</triangles>
			</mesh>
		</geometry>
	</library_geometries>
	<library_animations>
		<animation id="Box001-anim" name="Box001"></animation>
		<animation>
			<source id="Box001-translate.X-input">
				<float_array id="Box001-translate.X-input-array" count="3">0.000000 0.666667 1.000000</float_array>
				<technique_common>
					<accessor source="#Box001-translate.X-input-array" count="3" stride="1">
						<param type="float"></param>
					</accessor>
				</technique_common>
			</source>
			<source id="Box001-translate.X-output">
				<float_array id="Box001-translate.X-output-array" count="3">-0.475060 413.657227 413.657227</float_array>
				<technique_common>
					<accessor source="#Box001-translate.X-output-array" count="3" stride="1">
						<param type="float"></param>
					</accessor>
				</technique_common>
			</source>
			<source id="Box001-translate.X-interpolation">
				<Name_array id="Box001-translate.X-interpolation-array" count="3">BEZIER BEZIER BEZIER</Name_array>
				<technique_common>
					<accessor source="#Box001-translate.X-interpolation-array" count="3" stride="1">
						<param type="name"></param>
					</accessor>
				</technique_common>
			</source>
			<source id="Box001-translate.X-intan">
				<float_array id="Box001-translate.X-intan-array" count="6">0.000000 0.000000 0.444511 413.657227 0.888922 413.657227</float_array>
				<technique_common>
					<accessor source="#Box001-translate.X-intan-array" count="3" stride="2">
						<param type="float"></param>
						<param type="float"></param>
					</accessor>
				</technique_common>
			</source>
			<source id="Box001-translate.X-outtan">
				<float_array id="Box001-translate.X-outtan-array" count="6">0.222156 -0.475060 0.777744 413.657227 0.000000 0.000000</float_array>
				<technique_common>
					<accessor source="#Box001-translate.X-outtan-array" count="3" stride="2">
						<param type="float"></param>
						<param type="float"></param>
					</accessor>
				</technique_common>
			</source>
			<sampler id="Box001-translate.X">
				<input semantic="INPUT" source="#Box001-translate.X-input"></input>
				<input semantic="OUTPUT" source="#Box001-translate.X-output"></input>
				<input semantic="INTERPOLATION" source="#Box001-translate.X-interpolation"></input>
				<input semantic="IN_TANGENT" source="#Box001-translate.X-intan"></input>
				<input semantic="OUT_TANGENT" source="#Box001-translate.X-outtan"></input>
			</sampler>
			<channel source="#Box001-translate.X" target="Box001/translate.X"></channel>
		</animation>
		<animation>
			<source id="Box001-translate.Z-input">
				<float_array id="Box001-translate.Z-input-array" count="3">0.000000 0.666667 1.000000</float_array>
				<technique_common>
					<accessor source="#Box001-translate.Z-input-array" count="3" stride="1">
						<param type="float"></param>
					</accessor>
				</technique_common>
			</source>
			<source id="Box001-translate.Z-output">
				<float_array id="Box001-translate.Z-output-array" count="3">0.000000 0.000000 158.681717</float_array>
				<technique_common>
					<accessor source="#Box001-translate.Z-output-array" count="3" stride="1">
						<param type="float"></param>
					</accessor>
				</technique_common>
			</source>
			<source id="Box001-translate.Z-interpolation">
				<Name_array id="Box001-translate.Z-interpolation-array" count="3">BEZIER BEZIER BEZIER</Name_array>
				<technique_common>
					<accessor source="#Box001-translate.Z-interpolation-array" count="3" stride="1">
						<param type="name"></param>
					</accessor>
				</technique_common>
			</source>
			<source id="Box001-translate.Z-intan">
				<float_array id="Box001-translate.Z-intan-array" count="6">0.000000 0.000000 0.444511 0.000000 0.888922 158.681717</float_array>
				<technique_common>
					<accessor source="#Box001-translate.Z-intan-array" count="3" stride="2">
						<param type="float"></param>
						<param type="float"></param>
					</accessor>
				</technique_common>
			</source>
			<source id="Box001-translate.Z-outtan">
				<float_array id="Box001-translate.Z-outtan-array" count="6">0.222156 0.000000 0.777744 0.000000 0.000000 0.000000</float_array>
				<technique_common>
					<accessor source="#Box001-translate.Z-outtan-array" count="3" stride="2">
						<param type="float"></param>
						<param type="float"></param>
					</accessor>
				</technique_common>
			</source>
			<sampler id="Box001-translate.Z">
				<input semantic="INPUT" source="#Box001-translate.Z-input"></input>
				<input semantic="OUTPUT" source="#Box001-translate.Z-output"></input>
				<input semantic="INTERPOLATION" source="#Box001-translate.Z-interpolation"></input>
				<input semantic="IN_TANGENT" source="#Box001-translate.Z-intan"></input>
				<input semantic="OUT_TANGENT" source="#Box001-translate.Z-outtan"></input>
			</sampler>
			<channel source="#Box001-translate.Z" target="Box001/translate.Z"></channel>
		</animation>
		<animation>
			<source id="Box001-rotateZ.ANGLE-input">
				<float_array id="Box001-rotateZ.ANGLE-input-array" count="3">0.000000 0.666667 1.000000</float_array>
				<technique_common>
					<accessor source="#Box001-rotateZ.ANGLE-input-array" count="3" stride="1">
						<param type="float"></param>
					</accessor>
				</technique_common>
			</source>
			<source id="Box001-rotateZ.ANGLE-output">
				<float_array id="Box001-rotateZ.ANGLE-output-array" count="3">0.000000 180.242096 180.242096</float_array>
				<technique_common>
					<accessor source="#Box001-rotateZ.ANGLE-output-array" count="3" stride="1">
						<param type="float"></param>
					</accessor>
				</technique_common>
			</source>
			<source id="Box001-rotateZ.ANGLE-interpolation">
				<Name_array id="Box001-rotateZ.ANGLE-interpolation-array" count="3">BEZIER BEZIER BEZIER</Name_array>
				<technique_common>
					<accessor source="#Box001-rotateZ.ANGLE-interpolation-array" count="3" stride="1">
						<param type="name"></param>
					</accessor>
				</technique_common>
			</source>
			<source id="Box001-rotateZ.ANGLE-intan">
				<float_array id="Box001-rotateZ.ANGLE-intan-array" count="6">0.000000 0.000000 0.444511 180.242096 0.888922 180.242096</float_array>
				<technique_common>
					<accessor source="#Box001-rotateZ.ANGLE-intan-array" count="3" stride="2">
						<param type="float"></param>
						<param type="float"></param>
					</accessor>
				</technique_common>
			</source>
			<source id="Box001-rotateZ.ANGLE-outtan">
				<float_array id="Box001-rotateZ.ANGLE-outtan-array" count="6">0.222156 0.000000 0.777744 180.242096 0.000000 0.000000</float_array>
				<technique_common>
					<accessor source="#Box001-rotateZ.ANGLE-outtan-array" count="3" stride="2">
						<param type="float"></param>
						<param type="float"></param>
					</accessor>
				</technique_common>
			</source>
			<sampler id="Box001-rotateZ.ANGLE">
				<input semantic="INPUT" source="#Box001-rotateZ.ANGLE-input"></input>
				<input semantic="OUTPUT" source="#Box001-rotateZ.ANGLE-output"></input>
				<input semantic="INTERPOLATION" source="#Box001-rotateZ.ANGLE-interpolation"></input>
				<input semantic="IN_TANGENT" source="#Box001-rotateZ.ANGLE-intan"></input>
				<input semantic="OUT_TANGENT" source="#Box001-rotateZ.ANGLE-outtan"></input>
			</sampler>
			<channel source="#Box001-rotateZ.ANGLE" target="Box001/rotateZ.ANGLE"></channel>
		</animation>
	</library_animations>
	<library_visual_scenes>
		<visual_scene id="Test" name="Test">
			<node name="Box001" id="Box001" sid="Box001">
				<translate sid="translate">
					-0.475060 9.501188 0.000000
				</translate>
				<rotate sid="rotateZ">
					0 0 1 0.000000
				</rotate>
				<rotate sid="rotateY">
					0 1 0 0.000000
				</rotate>
				<rotate sid="rotateX">
					1 0 0 0.000000
				</rotate>
				<instance_geometry url="#Box001-lib">
					<bind_material>
						<technique_common>
							<instance_material symbol="_03 - Default" target="#_03 - Default"/>
						</technique_common>
					</bind_material>
				</instance_geometry>
			</node>
		</visual_scene>
	</library_visual_scenes>
	<scene>
		<instance_visual_scene url="#Test"></instance_visual_scene>
	</scene>
</COLLADA>