Difference between revisions of "Node OSG plugin extension"

From COLLADA Public Wiki
Jump to: navigation, search
m (None)
(Undo revision 7094 by LLutz74 (talk))
 
Line 6: Line 6:
 
The OpenSceneGraph plugin uses extensions to store specific node information used by [[OpenSceneGraph]] graphics library. It supports both reading and writing of the extension information. Currently no tools other than OpenSceneGraph based tools exist that are able to generate or reuse the information stored in the OpenSceneGraph node extension.
 
The OpenSceneGraph plugin uses extensions to store specific node information used by [[OpenSceneGraph]] graphics library. It supports both reading and writing of the extension information. Currently no tools other than OpenSceneGraph based tools exist that are able to generate or reuse the information stored in the OpenSceneGraph node extension.
  
First of all it is important to note that the OpenSceneGraph profile uses the type attribute in the <extra> element to specify which node information will be available in the <extra>. <BR> A <node> with an extra of profile="OpenSceneGraph" may be extended by a
+
First of all it is important to note that the OpenSceneGraph profile uses the type attribute in the <extra> element to specify which node information will be available in the <extra>. <BR> A <node> with an extra of profile="OpenSceneGraph" may be extended by a
* &lt;extra type="Node">  
+
* <extra type="Node">  
 
and/or one of
 
and/or one of
* &lt;extra type="LOD">
+
* <extra type="LOD">
* &lt;extra type="Switch">
+
* <extra type="Switch">
* &lt;extra type="MultiSwitch">
+
* <extra type="MultiSwitch">
* &lt;extra type="Sequence">
+
* <extra type="Sequence">
* &lt;extra type="DOFTransform">
+
* <extra type="DOFTransform">
  
 
== Detailed description ==
 
== Detailed description ==
Line 26: Line 26:
 
! Element || Subelement || Type  || Comments
 
! Element || Subelement || Type  || Comments
 
|-valign="top"
 
|-valign="top"
! &lt;Descriptions> || || contains a list of &lt;Description> elements ||  
+
! <Descriptions> || || contains a list of <Description> elements ||  
 
|-valign="top"
 
|-valign="top"
! || &lt;Description> || string || Line of free text
+
! || <Description> || string || Line of free text
 
|-
 
|-
 
|}
 
|}
Line 36: Line 36:
 
A node with a single description string containing "Some info".
 
A node with a single description string containing "Some info".
  
&lt;pre>
+
<pre>
&lt;extra type="Node">
+
<extra type="Node">
&lt;technique profile="OpenSceneGraph">
+
<technique profile="OpenSceneGraph">
&lt;Descriptions>
+
<Descriptions>
&lt;Description>Some info&lt;/Description>
+
<Description>Some info</Description>
&lt;/Descriptions>
+
</Descriptions>
&lt;/technique>
+
</technique>
&lt;/extra>
+
</extra>
&lt;/pre>
+
</pre>
  
 
=== LOD ===
 
=== LOD ===
Line 54: Line 54:
 
! Element || Subelement || Type  || Comments
 
! Element || Subelement || Type  || Comments
 
|-valign="top"
 
|-valign="top"
! &lt;nowiki>&lt;Center>&lt;/nowiki> ||  || 3 floats || Optional, when specified this center value is used, otherwise the boundingsphere center is used
+
! <nowiki><Center></nowiki> ||  || 3 floats || Optional, when specified this center value is used, otherwise the boundingsphere center is used
 
|-valign="top"
 
|-valign="top"
! &lt;Radius> ||  || float || Radius of user specified bounding sphere, this one is required if the &lt;nowiki>&lt;Center>&lt;/nowiki> is specified
+
! <Radius> ||  || float || Radius of user specified bounding sphere, this one is required if the <nowiki><Center></nowiki> is specified
 
|-valign="top"
 
|-valign="top"
! &lt;RangeMode> || || integer || How to interpret range values in the rangelist&lt;br>0 = DISTANCE_FROM_EYE_POINT&lt;br>1 = PIXEL_SIZE_ON_SCREEN
+
! <RangeMode> || || integer || How to interpret range values in the rangelist<br>0 = DISTANCE_FROM_EYE_POINT<br>1 = PIXEL_SIZE_ON_SCREEN
 
|-valign="top"
 
|-valign="top"
! &lt;RangeList> || || list of &lt;MinMax> elements ||
+
! <RangeList> || || list of <MinMax> elements ||
 
|-valign="top"
 
|-valign="top"
!  || &lt;MinMax> || two floats || Minimum and maximum range for enabling the child node.&lt;br>Either used as distance from eyepoint or as pixelsize on screen (of the boundingsphere).
+
!  || <MinMax> || two floats || Minimum and maximum range for enabling the child node.<br>Either used as distance from eyepoint or as pixelsize on screen (of the boundingsphere).
 
|-
 
|-
 
|}
 
|}
Line 68: Line 68:
 
==== Example ====
 
==== Example ====
  
A node with two children that will be switched based on distance from the viewpoint. A boundingsphere center of 1,2,3 is used. First <span class="plainlinks">[http://www.thepiggybackrider.com/ <span style="color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;/*CITATION*/">kid carrier</span>]</span> child (typically highest detail) will be active when viewer is within 300 meters from the center. Second child (typically lower detail) will be active when viewer is between 300 and 600 meters from center. Beyond 600 meter no child will be visible.
+
A node with two children that will be switched based on distance from the viewpoint. A boundingsphere center of 1,2,3 is used. First child (typically highest detail) will be active when viewer is within 300 meters from the center. Second child (typically lower detail) will be active when viewer is between 300 and 600 meters from center. Beyond 600 meter no child will be visible.
&lt;pre>
+
<pre>
&lt;extra type="LOD">
+
<extra type="LOD">
&lt;technique profile="OpenSceneGraph">
+
<technique profile="OpenSceneGraph">
&lt;Center>1 2 3&lt;/Center>
+
<Center>1 2 3</Center>
&lt;Radius>100&lt;/Radius>
+
<Radius>100</Radius>
&lt;RangeMode>0&lt;/RangeMode>
+
<RangeMode>0</RangeMode>
&lt;RangeList>
+
<RangeList>
&lt;MinMax>0 300&lt;/MinMax>
+
<MinMax>0 300</MinMax>
&lt;MinMax>300 600&lt;/MinMax>
+
<MinMax>300 600</MinMax>
&lt;/RangeList>
+
</RangeList>
&lt;/technique>
+
</technique>
&lt;/extra>
+
</extra>
&lt;/pre>
+
</pre>
  
 
=== Switch ===
 
=== Switch ===
Line 91: Line 91:
 
! Element ||  Type  || Comments
 
! Element ||  Type  || Comments
 
|-valign="top"
 
|-valign="top"
! &lt;ValueList>|| list of booleans || 0 for disabled child, 1 for enabled child&lt;br>Number of values must equal number of children
+
! <ValueList>|| list of booleans || 0 for disabled child, 1 for enabled child<br>Number of values must equal number of children
 
|-
 
|-
 
|}
 
|}
Line 99: Line 99:
 
Switch node with two children. First is active, second is not visible.
 
Switch node with two children. First is active, second is not visible.
  
&lt;pre>
+
<pre>
&lt;extra type="Switch">
+
<extra type="Switch">
&lt;technique profile="OpenSceneGraph">
+
<technique profile="OpenSceneGraph">
&lt;ValueList>1 0&lt;/ValueList>
+
<ValueList>1 0</ValueList>
&lt;/technique>
+
</technique>
&lt;/extra>
+
</extra>
&lt;/pre>
+
</pre>
  
 
=== MultiSwitch ===
 
=== MultiSwitch ===
Line 115: Line 115:
 
! Element || Type || Subelement || Comments
 
! Element || Type || Subelement || Comments
 
|-valign="top"
 
|-valign="top"
! &lt;ActiveSwitchSet>|| || integer || Zero based number for switchset to use. Range: 0 to (number of &lt;ValueLists> - 1)
+
! <ActiveSwitchSet>|| || integer || Zero based number for switchset to use. Range: 0 to (number of <ValueLists> - 1)
 
|-valign="top"
 
|-valign="top"
! &lt;ValueLists> || || list of &lt;ValueList> elements ||  
+
! <ValueLists> || || list of <ValueList> elements ||  
 
|-valign="top"
 
|-valign="top"
! || &lt;ValueList> || list of booleans || 0 for disabled child, 1 for enabled child&lt;br>Number of values must equal number of children
+
! || <ValueList> || list of booleans || 0 for disabled child, 1 for enabled child<br>Number of values must equal number of children
 
|-
 
|-
 
|}
 
|}
Line 128: Line 128:
 
The first switchset (0) is currently active so only the first child will be visible.
 
The first switchset (0) is currently active so only the first child will be visible.
  
&lt;pre>
+
<pre>
&lt;extra type="MultiSwitch">
+
<extra type="MultiSwitch">
&lt;technique profile="OpenSceneGraph">
+
<technique profile="OpenSceneGraph">
&lt;ActiveSwitchSet>0&lt;/ActiveSwitchSet>
+
<ActiveSwitchSet>0</ActiveSwitchSet>
&lt;ValueLists>
+
<ValueLists>
&lt;ValueList>1 0 0&lt;/ValueList>
+
<ValueList>1 0 0</ValueList>
&lt;ValueList>0 1 1&lt;/ValueList>
+
<ValueList>0 1 1</ValueList>
&lt;/ValueLists>
+
</ValueLists>
&lt;/technique>
+
</technique>
&lt;/extra>
+
</extra>
&lt;/pre>
+
</pre>
  
 
=== Sequence ===  
 
=== Sequence ===  
Line 148: Line 148:
 
! Element ||  Type  || Comments
 
! Element ||  Type  || Comments
 
|-valign="top"
 
|-valign="top"
! &lt;FrameTime>|| list of floats || Specifies the display duration of each child  
+
! <FrameTime>|| list of floats || Specifies the display duration of each child  
 
|-valign="top"
 
|-valign="top"
! &lt;LastFrameTime> || float|| Special time to display last frame of last loop
+
! <LastFrameTime> || float|| Special time to display last frame of last loop
 
|-valign="top"
 
|-valign="top"
! &lt;LoopMode> || integer || 0 = LOOP start over at the beginning&lt;br>1 = SWING pingpong animation back and forth
+
! <LoopMode> || integer || 0 = LOOP start over at the beginning<br>1 = SWING pingpong animation back and forth
 
|-valign="top"
 
|-valign="top"
! &lt;IntervalBegin> || integer || First child to take part in animation
+
! <IntervalBegin> || integer || First child to take part in animation
 
|-valign="top"
 
|-valign="top"
! &lt;IntervalEnd> || integer || Last child to take part in animation
+
! <IntervalEnd> || integer || Last child to take part in animation
 
|-valign="top"
 
|-valign="top"
! &lt;DurationSpeed> || float || Multiplier of real-time clock, set to N to go N times faster
+
! <DurationSpeed> || float || Multiplier of real-time clock, set to N to go N times faster
 
|-valign="top"
 
|-valign="top"
! &lt;DurationNReps> || integer || How many times to repeat,  -1 means repeat forever
+
! <DurationNReps> || integer || How many times to repeat,  -1 means repeat forever
 
|-valign="top"
 
|-valign="top"
! &lt;SequenceMode> || integer|| 0 = START&lt;br>1 = STOP&lt;br>2 = PAUSE&lt;br>3 = RESUME
+
! <SequenceMode> || integer|| 0 = START<br>1 = STOP<br>2 = PAUSE<br>3 = RESUME
 
|-
 
|-
 
|}
 
|}
  
 
==== Example ====
 
==== Example ====
&lt;pre>
+
<pre>
&lt;extra type="Sequence">
+
<extra type="Sequence">
&lt;technique profile="OpenSceneGraph">
+
<technique profile="OpenSceneGraph">
&lt;FrameTime>0 0&lt;/FrameTime>
+
<FrameTime>0 0</FrameTime>
&lt;LastFrameTime>0&lt;/LastFrameTime>
+
<LastFrameTime>0</LastFrameTime>
&lt;LoopMode>0&lt;/LoopMode>
+
<LoopMode>0</LoopMode>
&lt;IntervalBegin>0&lt;/IntervalBegin>
+
<IntervalBegin>0</IntervalBegin>
&lt;IntervalEnd>-1&lt;/IntervalEnd>
+
<IntervalEnd>-1</IntervalEnd>
&lt;DurationSpeed>1&lt;/DurationSpeed>
+
<DurationSpeed>1</DurationSpeed>
&lt;DurationNReps>-1&lt;/DurationNReps>
+
<DurationNReps>-1</DurationNReps>
&lt;SequenceMode>0&lt;/SequenceMode>
+
<SequenceMode>0</SequenceMode>
&lt;/technique>
+
</technique>
&lt;/extra>
+
</extra>
&lt;/pre>
+
</pre>
  
 
=== DOFTransform ===
 
=== DOFTransform ===
Line 190: Line 190:
 
! Element || Type  || Comments
 
! Element || Type  || Comments
 
|-valign="top"
 
|-valign="top"
! &lt;MinHPR> || 3 floats || Minimum orientation limit specified as Euler angles
+
! <MinHPR> || 3 floats || Minimum orientation limit specified as Euler angles
 
|-valign="top"
 
|-valign="top"
! &lt;MaxHPR> || 3 floats || Maximum orientation limit specified as Euler angles
+
! <MaxHPR> || 3 floats || Maximum orientation limit specified as Euler angles
 
|-valign="top"
 
|-valign="top"
! &lt;IncrementHPR> || 3 floats  || Rotation speed as Euler angles
+
! <IncrementHPR> || 3 floats  || Rotation speed as Euler angles
 
|-valign="top"
 
|-valign="top"
! &lt;CurrentHPR> || 3 floats || Current orientation as Euler angles
+
! <CurrentHPR> || 3 floats || Current orientation as Euler angles
 
|-valign="top"
 
|-valign="top"
! &lt;MinTranslate> || 3 floats || Minimum translation limit
+
! <MinTranslate> || 3 floats || Minimum translation limit
 
|-valign="top"
 
|-valign="top"
! &lt;MaxTranslate> || 3 floats || Maximum translation limit
+
! <MaxTranslate> || 3 floats || Maximum translation limit
 
|-valign="top"
 
|-valign="top"
! &lt;IncrementTranslate> || 3 floats || Translation speed
+
! <IncrementTranslate> || 3 floats || Translation speed
 
|-valign="top"
 
|-valign="top"
! &lt;CurrentTranslate> || 3 floats || Current translation
+
! <CurrentTranslate> || 3 floats || Current translation
 
|-valign="top"
 
|-valign="top"
! &lt;MinScale> || 3 floats || Minimum scale limit
+
! <MinScale> || 3 floats || Minimum scale limit
 
|-valign="top"
 
|-valign="top"
! &lt;MaxScale> || 3 floats || Maximum scale limit
+
! <MaxScale> || 3 floats || Maximum scale limit
 
|-valign="top"
 
|-valign="top"
! &lt;IncrementScale> || 3 floats || Scaling speed
+
! <IncrementScale> || 3 floats || Scaling speed
 
|-valign="top"
 
|-valign="top"
! &lt;CurrentScale> || 3 floats || Current scale factor
+
! <CurrentScale> || 3 floats || Current scale factor
 
|-valign="top"
 
|-valign="top"
! &lt;MultOrder> || integer || Multiplication order of the Euler angles&lt;br>0 = PRH&lt;br>1 = PHR&lt;br>2 = HPR&lt;br>3 = HRP&lt;br>4 = RPH&lt;br>5 = RHP
+
! <MultOrder> || integer || Multiplication order of the Euler angles<br>0 = PRH<br>1 = PHR<br>2 = HPR<br>3 = HRP<br>4 = RPH<br>5 = RHP
 
|-valign="top"
 
|-valign="top"
! &lt;LimitationFlags> || long || Degrees of freedom limitions in bits&lt;br>0 = x translation limited (2^31)&lt;br>1 = y translation limited (2^30)&lt;br>2 = z translation limited (2^29)&lt;br>3 = pitch limited (2^28)&lt;br>4 = roll limited (2^27)&lt;br>5 = yaw limited (2^26)&lt;br>6 = x scale limited (2^25)&lt;br>7 = y scale limited (2^24)&lt;br>8 = z scale limited (2^23)
+
! <LimitationFlags> || long || Degrees of freedom limitions in bits<br>0 = x translation limited (2^31)<br>1 = y translation limited (2^30)<br>2 = z translation limited (2^29)<br>3 = pitch limited (2^28)<br>4 = roll limited (2^27)<br>5 = yaw limited (2^26)<br>6 = x scale limited (2^25)<br>7 = y scale limited (2^24)<br>8 = z scale limited (2^23)
 
|-valign="top"
 
|-valign="top"
! &lt;AnimationOn> || bool || When true the DOF Transform will animate all degrees of freedom that are not limited by the &lt;LimitationFlags>. A degree of freedom will pingpong between the specified minimum and maximum limits.&lt;br>0 = FALSE, 1 = TRUE,
+
! <AnimationOn> || bool || When true the DOF Transform will animate all degrees of freedom that are not limited by the <LimitationFlags>. A degree of freedom will pingpong between the specified minimum and maximum limits.<br>0 = FALSE, 1 = TRUE,
 
|-valign="top"
 
|-valign="top"
! &lt;PutMatrix> || 16 float values || Matrix that can be used for specifying a pivot point
+
! <PutMatrix> || 16 float values || Matrix that can be used for specifying a pivot point
 
|-
 
|-
 
|}
 
|}
  
 
==== Example ====
 
==== Example ====
&lt;pre>
+
<pre>
&lt;extra type="DOFTransform">
+
<extra type="DOFTransform">
&lt;technique profile="OpenSceneGraph">
+
<technique profile="OpenSceneGraph">
&lt;MinHPR>0 -0.174533 0&lt;/MinHPR>
+
<MinHPR>0 -0.174533 0</MinHPR>
&lt;MaxHPR>0 0.872665 0&lt;/MaxHPR>
+
<MaxHPR>0 0.872665 0</MaxHPR>
&lt;IncrementHPR>0 0.0174533 0&lt;/IncrementHPR>
+
<IncrementHPR>0 0.0174533 0</IncrementHPR>
&lt;CurrentHPR>0 0 0&lt;/CurrentHPR>
+
<CurrentHPR>0 0 0</CurrentHPR>
&lt;MinTranslate>0 0 0&lt;/MinTranslate>
+
<MinTranslate>0 0 0</MinTranslate>
&lt;MaxTranslate>0 0 0&lt;/MaxTranslate>
+
<MaxTranslate>0 0 0</MaxTranslate>
&lt;IncrementTranslate>0 0 0&lt;/IncrementTranslate>
+
<IncrementTranslate>0 0 0</IncrementTranslate>
&lt;CurrentTranslate>0 0 0&lt;/CurrentTranslate>
+
<CurrentTranslate>0 0 0</CurrentTranslate>
&lt;MinScale>0 0 0&lt;/MinScale>
+
<MinScale>0 0 0</MinScale>
&lt;MaxScale>1 1 1&lt;/MaxScale>
+
<MaxScale>1 1 1</MaxScale>
&lt;IncrementScale>0 0 0&lt;/IncrementScale>
+
<IncrementScale>0 0 0</IncrementScale>
&lt;CurrentScale>1 1 1&lt;/CurrentScale>
+
<CurrentScale>1 1 1</CurrentScale>
&lt;MultOrder>0&lt;/MultOrder>
+
<MultOrder>0</MultOrder>
&lt;LimitationFlags>269964960&lt;/LimitationFlags>
+
<LimitationFlags>269964960</LimitationFlags>
&lt;AnimationOn>0&lt;/AnimationOn>
+
<AnimationOn>0</AnimationOn>
&lt;PutMatrix>
+
<PutMatrix>
 
1 0 0 0
 
1 0 0 0
 
0 1 0 0
 
0 1 0 0
 
0 0 1 0
 
0 0 1 0
 
0 0 0 1
 
0 0 0 1
&lt;/PutMatrix>
+
</PutMatrix>
&lt;/technique>
+
</technique>
&lt;/extra>
+
</extra>
&lt;/pre>
+
</pre>

Latest revision as of 18:03, 26 September 2011

Extension information
This article is part of the COLLADA extensions directory
Adding to the extensions directory

Overview

The OpenSceneGraph plugin uses extensions to store specific node information used by OpenSceneGraph graphics library. It supports both reading and writing of the extension information. Currently no tools other than OpenSceneGraph based tools exist that are able to generate or reuse the information stored in the OpenSceneGraph node extension.

First of all it is important to note that the OpenSceneGraph profile uses the type attribute in the <extra> element to specify which node information will be available in the <extra>.
A <node> with an extra of profile="OpenSceneGraph" may be extended by a

  • <extra type="Node">

and/or one of

  • <extra type="LOD">
  • <extra type="Switch">
  • <extra type="MultiSwitch">
  • <extra type="Sequence">
  • <extra type="DOFTransform">

Detailed description

Because OpenSceneGraph is Open Source software the source code can be inspected to see the intended behaviour.

Node

Each node in OSG can have a list of strings attached.

Element Subelement Type Comments
<Descriptions> contains a list of <Description> elements
<Description> string Line of free text

Example

A node with a single description string containing "Some info".

<extra type="Node">
	<technique profile="OpenSceneGraph">
		<Descriptions>
			<Description>Some info</Description>
		</Descriptions>
	</technique>
</extra>

LOD

An OSG level of detail (LOD) node specifies when to switch child nodes either based on distance or on pixels on screen.

Element Subelement Type Comments
<Center> 3 floats Optional, when specified this center value is used, otherwise the boundingsphere center is used
<Radius> float Radius of user specified bounding sphere, this one is required if the <Center> is specified
<RangeMode> integer How to interpret range values in the rangelist
0 = DISTANCE_FROM_EYE_POINT
1 = PIXEL_SIZE_ON_SCREEN
<RangeList> list of <MinMax> elements
<MinMax> two floats Minimum and maximum range for enabling the child node.
Either used as distance from eyepoint or as pixelsize on screen (of the boundingsphere).

Example

A node with two children that will be switched based on distance from the viewpoint. A boundingsphere center of 1,2,3 is used. First child (typically highest detail) will be active when viewer is within 300 meters from the center. Second child (typically lower detail) will be active when viewer is between 300 and 600 meters from center. Beyond 600 meter no child will be visible.

<extra type="LOD">
	<technique profile="OpenSceneGraph">
		<Center>1 2 3</Center>
		<Radius>100</Radius>
		<RangeMode>0</RangeMode>
		<RangeList>
			<MinMax>0 300</MinMax>
			<MinMax>300 600</MinMax>
		</RangeList>
	</technique>
</extra>

Switch

The OSG switch node allows for switching individual children on or off and is typically controlled from within the application.

Element Type Comments
<ValueList> list of booleans 0 for disabled child, 1 for enabled child
Number of values must equal number of children

Example

Switch node with two children. First is active, second is not visible.

<extra type="Switch">
	<technique profile="OpenSceneGraph">
		<ValueList>1 0</ValueList>
	</technique>
</extra>

MultiSwitch

The OSG MultSwitch node stores predefined sets of children to enable and disable. The application can activate one of these predefined sets.

Element Type Subelement Comments
<ActiveSwitchSet> integer Zero based number for switchset to use. Range: 0 to (number of <ValueLists> - 1)
<ValueLists> list of <ValueList> elements
<ValueList> list of booleans 0 for disabled child, 1 for enabled child
Number of values must equal number of children

Example

MultiSwitch node with three children and two predefined switch sets. The first switchset will show only the first child. The second switchset will show the second and third child. The first switchset (0) is currently active so only the first child will be visible.

<extra type="MultiSwitch">
	<technique profile="OpenSceneGraph">
		<ActiveSwitchSet>0</ActiveSwitchSet>
		<ValueLists>
			<ValueList>1 0 0</ValueList>
			<ValueList>0 1 1</ValueList>
		</ValueLists>
	</technique>
</extra>

Sequence

The OSG sequence node can be used for animation by switching children on or off dynamically.

Element Type Comments
<FrameTime> list of floats Specifies the display duration of each child
<LastFrameTime> float Special time to display last frame of last loop
<LoopMode> integer 0 = LOOP start over at the beginning
1 = SWING pingpong animation back and forth
<IntervalBegin> integer First child to take part in animation
<IntervalEnd> integer Last child to take part in animation
<DurationSpeed> float Multiplier of real-time clock, set to N to go N times faster
<DurationNReps> integer How many times to repeat, -1 means repeat forever
<SequenceMode> integer 0 = START
1 = STOP
2 = PAUSE
3 = RESUME

Example

<extra type="Sequence">
	<technique profile="OpenSceneGraph">
		<FrameTime>0 0</FrameTime>
		<LastFrameTime>0</LastFrameTime>
		<LoopMode>0</LoopMode>
		<IntervalBegin>0</IntervalBegin>
		<IntervalEnd>-1</IntervalEnd>
		<DurationSpeed>1</DurationSpeed>
		<DurationNReps>-1</DurationNReps>
		<SequenceMode>0</SequenceMode>
	</technique>
</extra>

DOFTransform

An OSG DOFTransform specifies a transformation that can be animated with limited degrees of freedom.

Element Type Comments
<MinHPR> 3 floats Minimum orientation limit specified as Euler angles
<MaxHPR> 3 floats Maximum orientation limit specified as Euler angles
<IncrementHPR> 3 floats Rotation speed as Euler angles
<CurrentHPR> 3 floats Current orientation as Euler angles
<MinTranslate> 3 floats Minimum translation limit
<MaxTranslate> 3 floats Maximum translation limit
<IncrementTranslate> 3 floats Translation speed
<CurrentTranslate> 3 floats Current translation
<MinScale> 3 floats Minimum scale limit
<MaxScale> 3 floats Maximum scale limit
<IncrementScale> 3 floats Scaling speed
<CurrentScale> 3 floats Current scale factor
<MultOrder> integer Multiplication order of the Euler angles
0 = PRH
1 = PHR
2 = HPR
3 = HRP
4 = RPH
5 = RHP
<LimitationFlags> long Degrees of freedom limitions in bits
0 = x translation limited (2^31)
1 = y translation limited (2^30)
2 = z translation limited (2^29)
3 = pitch limited (2^28)
4 = roll limited (2^27)
5 = yaw limited (2^26)
6 = x scale limited (2^25)
7 = y scale limited (2^24)
8 = z scale limited (2^23)
<AnimationOn> bool When true the DOF Transform will animate all degrees of freedom that are not limited by the <LimitationFlags>. A degree of freedom will pingpong between the specified minimum and maximum limits.
0 = FALSE, 1 = TRUE,
<PutMatrix> 16 float values Matrix that can be used for specifying a pivot point

Example

<extra type="DOFTransform">
	<technique profile="OpenSceneGraph">
		<MinHPR>0 -0.174533 0</MinHPR>
		<MaxHPR>0 0.872665 0</MaxHPR>
		<IncrementHPR>0 0.0174533 0</IncrementHPR>
		<CurrentHPR>0 0 0</CurrentHPR>
		<MinTranslate>0 0 0</MinTranslate>
		<MaxTranslate>0 0 0</MaxTranslate>
		<IncrementTranslate>0 0 0</IncrementTranslate>
		<CurrentTranslate>0 0 0</CurrentTranslate>
		<MinScale>0 0 0</MinScale>
		<MaxScale>1 1 1</MaxScale>
		<IncrementScale>0 0 0</IncrementScale>
		<CurrentScale>1 1 1</CurrentScale>
		<MultOrder>0</MultOrder>
		<LimitationFlags>269964960</LimitationFlags>
		<AnimationOn>0</AnimationOn>
		<PutMatrix>
			1 0 0 0
			0 1 0 0
			0 0 1 0
			0 0 0 1
		</PutMatrix>
	</technique>
</extra>