Technical Features of IMML¶
XML Origins¶
As IMML is an extension of XML 1.0, the same general principles apply to the text, in that it uses the default encoding utf-8 and honours the 5 predefined entities: quot, amp, apos, lt, and gt.
Document Containers¶
IMML:¶
<IMML> </IMML>
Widget:¶
<Widget> </Widget>
Coordinate System¶
IMML uses a three dimensional Cartesian coordinate system, under the left-hand rule where the x-axis increases to the right, y-axis increases upwards and the z-axis increases away from the origin. All coordinates are with respect to the parent element. The outermost parent element is the world which follows the rules defined in the above diagram. All elements placed as the child of the world are referred to as being elements in world coordinates.
Position
Position is defined as a Vector3, expressed in meters. Position is always relative to the parent element and has a precision to the limit of a floating point number. An undefined position will default to the origin of the parent element.
Rotation
Rotation is defined as a Vector3, expressed in degrees. Rotation is always relative to the parent element.
Level of Precision: To the limit of a floating point number.
Default: A rotation of 0,0,0 relative to the parent element.
Size
Size is defined as a Vector3, expressed in metres. Size has no relationship to the parent element and maintains a precision to the limit of a floating point number.
Network Context
In a multi-nodal network context, IMML elements that are network enabled must report state changes to all relevant nodes (clients/peers/servers/listeners). In the scenario where an interested party joins after state modifications have occurred, that party must be updated with the full state for each network enabled element.
In the left hand corner we have:
Left-hand Cartesian coordinate system y increasing upwards, x increasing to the right and z increasing into the screen
Moving on to the top right corner:
Big person and little person, meant to signify parent-child hierarchy which IMML supports.
Position and Rotation are relative to the parent element. Size is always relative to the world
IMML supports networking state propagation. It works on a per element basis and Network Enabled=true means changes to that element will propagate from any client. Network Owner specified will cause only the changes from that client to propagate Network property changes can be filtered -> very handy to prevent certain properties of elements from changing on other clients or to filter frequently changing properties such as position or rotation on an avatar
__