-
Notifications
You must be signed in to change notification settings - Fork 0
XML Scene
This page describes the format of an XML scene.
Every scene saved or loaded by the Shoggoth Engine follows a simple format. The scene is described in the tag scene
. Inside there should be the root tag, which is an entity of type root-node
. All of its children are the rest of the entities describing the scene. A typical root node would look like this:
<root type="root-node"> ... </root>
Every attribute in an XML tag has a default value if not specified.
If a certain tag is of type entity
, then the name of the entity is the name of the tag. It is important to note that every entity should have a different name. In the case two entities are named the same it will load the first one, ignore any entity with a repeated name and print a warning. It also includes the position as a 3D vector with format "X Y Z" and the orientation as a quaternion with format "W X Y Z" of the entity. An entity could look like this:
<entity-name type="entity" position="0 0 0" orientation="1 0 0 0"> ... </entity-name>
As children to an entity could be more entities or its components. If it is another entity it will keep reading recursively. If it is of type component
, then a new component of type component-name
will be created and attached to the current entity. All of the attributes will then be read and set to the component, if no attribute is specified a default value will be used. A component would use the following format:
<component-name type="component" attribute1="x" attribute2="y" ... attributeN="n"/>
At least one camera component must be present, otherwise it will fail to load the scene.
Example XML scene:
<?xml version="1.0" encoding="utf-8"?> <scene> <root type="root-node"> <building type="entity" position="5 4 -10" orientation="1 0 0 0"> <renderablemesh type="component" model="$box 3 9 3"/> <rigidbody type="component" collisionshape="#box 3 9 3" mass="0"/> </building> <cube type="entity" position="-1 8 0" orientation="0.956937 0.168491 0.228949 0.0588568"> <renderablemesh type="component" model="$box 0.5 0.5 0.5"/> <rigidbody type="component" collisionshape="#box 0.5 0.5 0.5" mass="1"/> </cube> <floor type="entity" position="0 -1 0" orientation="1 0 0 0"> <renderablemesh type="component" model="$box 100 1 100"/> <rigidbody type="component" collisionshape="#box 100 1 100" mass="0"/> </floor> <light1 type="entity" position="5 5 5" orientation="1 0 0 0"> <light type="component" ambient="0 0 0 1" diffuse="1 1 1 1" specular="1 1 1 1"/> </light1> <camera1 type="entity" position="0 4 10" orientation="0.995004 -0.0998334 0 0"> <camera type="component" cameratype="1" perspectivefov="45" neardistance="0.1" fardistance="1000"/> </camera1> </root> </scene>