3dml: A Language for 3D Interaction Techniques Specification Pablo Figueroa University of Alberta...

22
3dml: A Language for 3D Interaction Techniques Specification Pablo Figueroa University of Alberta May 2001
  • date post

    18-Dec-2015
  • Category

    Documents

  • view

    216
  • download

    0

Transcript of 3dml: A Language for 3D Interaction Techniques Specification Pablo Figueroa University of Alberta...

3dml: A Language for 3D Interaction Techniques Specification

Pablo FigueroaUniversity of AlbertaMay 2001

Contents

MotivationRelated WorkBasic ConceptsLanguage ElementsFuture Work

Motivation

Application Retargeting

Hw. Platform 1

VRApp

...TransformationProcess

Hw. Platform N

Motivation (2)

Edit Content:GeometrySoundHaptic EffectsBehavior

Edit VR Worlds:ContentControlAnimationsBehaviorStates

Tune to Hardware:Quality ContentControlAnimationsBehavior

VRApp

Hardware Settings:Mode of operationConfiguration

•Users•APIs•Tools

Related Work

Readability of Interaction Techniques (ITs) API documentation Papers

Rapid Development of VR Apps. C++/Java-based toolkits Alice (Python + Visual programming) VRML

Basic Concepts

Filters, devices, holders, VR objects, connections, composition, Discrete time

Filters

InputDevs.

OutputDevs.

VR Objects

Time Management

Two separate dataflows

App. Behavior Rendering

t1 t2 t3

Language Elements

Class declaration Application definition Instantiation Constant and connection declarations Filter connection Geometry of VR objects Embedded documentation Element overloading Reuse Complexity hiding

Class Declaration

<FilterClass id="SelectByTouching"> <Description> Implements selection by collision detection. </Description> <IPort id="p" type="Pos3D" defValue="handRepr.pos"><ShortDesc>Change of position</ShortDesc></IPort> <IPort id="q" type="Quaternion" defValue="handRepr.q"><ShortDesc>Change rotation</ShortDesc></IPort><IPort id="handRepr" type="VRObject">

<ShortDesc> Object that represents the users' hand </ShortDesc> </IPort> <IPort id="scene" type="Scene"> <ShortDesc>Selectable objects</ShortDesc> </IPort> <IPort id="addObject" type="VRObject"><ShortDesc>Dynamically added objects</ShortDesc> </IPort> <IPort id="removeObject" type="VRObject"><ShortDesc>Dynamically removed objects</ShortDesc></IPort> <OPort id="object" type="VRObject"><ShortDesc>Selected object</ShortDesc> </OPort>

</FilterClass>

Class Declaration (2)

<FilterClass id="GoGoIT"><Filter id="gogo" type="GoGo"></Filter> <Filter id="select" type="SelectByTouchingIT"></Filter> <VRObject id="cubeObj" primitive="Box"/> <ObjectHolder id="cube"> <Input id="setVisible" target="gogo" port="setVisible"/> | <Input id="object" target="_self" port="cubeObj"/> </ObjectHolder> <Binding target="gogo" port="pos"> <Port target="select" port="pos"/> </Binding> <Binding target="gogo" port="q"> <Port target="select" port="q"/> </Binding> <IPort id="K" type="float" defValue="0.167"> <Port target="gogo" port="K"/> </IPort> <IPort id="posHand" type="Pos3D"> <Port target="gogo" port="pHand"/> <Port target="cube" port="p"/> </Iport>...<OPort id="object" type="VRObject"> <Port target="select" port="object"/> </OPort>

</FilterClass>

Application Definition

<App> <!-- Load the scene --> <Scene id="scene" filename="scene.wrl"/> <Object id="handRepr" filename="hand.wrl"/> <!-- Platform-dependent section --> <ODevice id="console"/> <IDevice id="handTracker"/> <!-- Connections --> <Input id="pos" target="handTracker" port="pos"/> <Input id="q" target="handTracker" port="q"/> <!-- IT instances, with iport initialization --> <ObjectHolder id="handRepresentation"> <Input id="setTranslation" target="_self" port="pos"/> <Input id="setRotation" target="_self" port="q"/> </ObjectHolder> <Filter id="select" type="SelectByTouching"> <Input id="handRepr" target="_self" port="handRepr"/> <Input id="pos" target="_self" port="pos"/> <Input id="q" target="_self" port="q"/> <Input id="scene" target="_self" port="scene"/> </Filter> <Filter id="feedback" type="FeedbackOneIT"> <Input id="object" target="select" port="object"/> </Filter>

</App>

Instantiation

<App> …<ODevice id="console"/> <IDevice id="handTracker"/> <Filter id="select" type="SelectByTouching"> <Input id="handRepr" target="_self" port="handRepr"/> <Input id="pos" target="_self" port="pos"/> <Input id="q" target="_self" port="q"/> <Input id="scene" target="_self" port="scene"/> </Filter> <Filter id="feedback" type="FeedbackOneIT"> <Input id="object" target="select" port="object"/> </Filter>

</App>

<FilterClass id="GoGoIT"><Filter id="gogo" type="GoGo"></Filter> <Filter id="select" type="SelectByTouchingIT"></Filter> <VRObject id="cubeObj" primitive="Box"/>

</FilterClass>

Constant and Connection Declaration

<App> …<!-- Connections --> <Input id="pos" target="handTracker" port="pos"/> <Input id="q" target="handTracker" port="q"/> <!-- IT instances, with iport initialization --> <ObjectHolder id="handRepresentation"> <Input id="setTranslation" target="_self" port="pos"/> <Input id="setRotation" target="_self" port="q"/> </ObjectHolder> <Filter id="select" type="SelectByTouching"> <Input id="handRepr" target="_self" port="handRepr"/> <Input id="pos" target="_self" port="pos"/> <Input id="q" target="_self" port="q"/> <Input id="scene" target="_self" port="scene"/> </Filter>

</App>

Filter Connection

<FilterClass id="GoGoIT">... <ObjectHolder id="cube"> <Input id="setVisible" target="gogo" port="setVisible"/> | <Input id="object" target="_self" port="cubeObj"/> </ObjectHolder> <Binding target="gogo" port="pos"> <Port target="select" port="pos"/> </Binding> <Binding target="gogo" port="q"> <Port target="select" port="q"/> </Binding> <IPort id="posHand" type="Pos3D"> <Port target="gogo" port="pHand"/> <Port target="cube" port="p"/> </Iport>...<OPort id="object" type="VRObject"> <Port target="select" port="object"/> </OPort>

</FilterClass>

Geometry of VR Objects

<App> <!-- Load the scene --> <Scene id="scene" filename="scene.wrl"/> <Object id="handRepr" filename="hand.wrl"/> ...

</App>

<FilterClass id="GoGoIT"><VRObject id="cubeObj" primitive="Box"/> ...

</FilterClass>

Embedded Documentation

<FilterClass id="SelectByTouching"> <Description> Implements selection by collision detection. </Description> <IPort id="p" type="Pos3D" defValue="handRepr.pos"><ShortDesc>Change of position</ShortDesc> </IPort><IPort id="q" type="Quaternion" defValue="handRepr.q"><ShortDesc>Change rotation</ShortDesc></IPort><IPort id="handRepr" type="VRObject">

<ShortDesc>Object that represents the users' hand</ShortDesc> </IPort> <IPort id="scene" type="Scene"> <ShortDesc>Selectable objects</ShortDesc> </IPort> <IPort id="addObject" type="VRObject"><ShortDesc>Dynamically added objects</ShortDesc> </IPort><IPort id="removeObject" type="VRObject"><ShortDesc>Dynamically removed objects</ShortDesc></IPort> <OPort id="object" type="VRObject"> <ShortDesc>Selected object</ShortDesc> </OPort>

</FilterClass>

Element Overloading

IPort/OPort<FilterClass id="SelectByTouching">

<IPort id="p" type="Pos3D" defValue="handRepr.pos"><ShortDesc>Change of position</ShortDesc></IPort> <OPort id="object" type="VRObject"><ShortDesc>Selected object</ShortDesc> </OPort>

</FilterClass>

<FilterClass id="GoGoIT"><IPort id="posHand" type="Pos3D"> <Port target="gogo" port="pHand"/> <Port target="cube" port="p"/> </IPort><OPort id="object" type="VRObject"> <Port target="select" port="object"/> </OPort>

</FilterClass>

Element Overloading (2)

Input<App>

<!-- Connections --> <Input id="pos" target="handTracker" port="pos"/> <Input id="q" target="handTracker" port="q"/>

</App>

<FilterClass id="GoGoIT"><ObjectHolder id="cube"> <Input id="setVisible" target="gogo" port="setVisible"/> | <Input id="object" target="_self" port="cubeObj"/> </ObjectHolder>

</FilterClass>

Filter

Reuse

<FilterClass id="GoGoIT"><Filter id="gogo" type="GoGo"></Filter> <Filter id="select" type="SelectByTouchingIT"></Filter>

</FilterClass>

<App> <Filter id="select" type="SelectByTouching"> <Input id="handRepr" target="_self" port="handRepr"/> <Input id="pos" target="_self" port="pos"/> <Input id="q" target="_self" port="q"/> <Input id="scene" target="_self" port="scene"/> </Filter>

</App>

Complexity Hiding

Presentation Scheme

Future Work

Diagram generationSpecification validationImplementation

Translate 3dml to an executableRetargetingRepresentation of changes