26 Oct 2005 - In partial fulfilm ent of the requirem ents of the degree of Bachelor of Inform ation Technology with H on
Enabling User-Interaction in Virtual Environments for Non-Programmers
Glen Maddern
Supervised By:
Dr. Jasmine Banks
Honours Thesis
Submitted on 26 October, 2005 to The School of Information Technology and Electrical Engineering The University of Queensland
!"#
$" %
& ' $!!(
)
'
*
+
,
'
&
,
-
, ' ,
*
, .' '
& ** *
.
1
'
2 %
3 / & $"' $!!(/
,
/
& /0 ,
& ** &
& '
Acknowledgements , ) 4 , ** *
&
,
. ' * & / 6
: *
.
.
. 8 9
* '
* 5 / 7 * 5 /
'
' 7 , /
/
> * , 8 9 7&
= 7&
' 6
' ' @ * 5 **
&
7* * ', *
& >
&
7
, * =
,
* '
=
,
/ & ,
&
,
*
**
+
*
' = =&
*
',
,
&
8 9 =*
&
=* /
7& / ,
' *
' /
'
=
/ *
>
* * ,
* 8 9 , -
,
& ,
,
/
, *
+ * &
/
, ,
=&
' /
*
**
' '
', *
Enabling User-Interaction in Virtual Environments for Non-Programmers Honours Thesis Table of Contents && ; & & B/ B/B B/$ B/C B/ B/( B/" $/
. $/B $/B/B $/B/$ $/$ $/$/B $/$/$ $/$/C $/$/ C/ 8 9 C/B C/$ C/C 8 C/ 8 C/( C/" C/# > C/E C/D C/B! / 9 /B % /B/B /B/$ /$ ) /$/B /$/$ /$/C /$/ /$/( /$/" /$/#
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// A ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// A > ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////A > ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////A > ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// B * % , ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// B ///////////////////////////////////////////////////////////////////////////////////////////////////////////// B //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// B 5 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// B 5 2 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// $ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// C //////////////////////////////////////////////////////////////////////////////////////////////////////////////// ( > /////////////////////////////////////////////////////////////////////////////////////////// ( ) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ( > ///////////////////////////////////// # * //////////////////////////////////////////////////////////////////////////////////////////////// D A ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// D ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// D % /////////////////////////////////////////////////////////////////////////////////////////////////////////////// B! ; /////////////////////////////////////////////////////////////////////////// BB /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// BC /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// BC * //////////////////////////////////////////////////////////////////////////////////////////////////// BC * ; ///////////////////////////////////////////////////////////////////////////////////////////// B %* //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// B ///////////////////////////////////////////////////////////////////////////////////////////////////////// B( ; ; ; ////////////////////////////////////////////////////////////////////////////////////////////////////// B" 2 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// BE 7 * //////////////////////////////////////////////////////////////////////////////////////////////////////////////// BE ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// $! * /////////////////////////////////////////////////////////////////////////////////////////////////// $! ) //////////////////////////////////////////////////////////////////////////////////////////////////////////////// $C , /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// $C ) 9 ) ////////////////////////////////////////////////////////////////////////// $C 8 9 /////////////////////////////////////////////////////////////////// $C ///////////////////////////////////////////////////////////////////////////////////////// $ 8 , 3 //////////////////////////////////////////////////////////////////////////////////////////// $ = =3 ///////////////////////////////////////////////////////////////////////////////////////////////////// $ 8 ///////////////////////////////////////////////////////////////////////////////////////////////// $( ///////////////////////////////////////////////////////////////////////////////////////////////////////////// $" /////////////////////////////////////////////////////////////////////////////////////////////////////////////// $# ) ////////////////////////////////////////////////////////////////////////////////////////////////////// $# 9 * /////////////////////////////////////////////////////////////////////////////////////////////////////// $D
/$/E /C /C/B /C/$ /C/C /C/ /C/( /C/" / (/
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// C! ) /////////////////////////////////////////////////////////////////////////////////// C! ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// C! %* ) ////////////////////////////////////////////////////////////////////////////////////////////// C! 0 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// CB 8 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// C$ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// C" 9 //////////////////////////////////////////////////////////////////////////////////////////////////////////////// C# * ////////////////////////////////////////////////////////////////////////////////////////////// CD 8 9 ///////////////////////////////////////////////////////////////////////////////////////////////// B , /////////////////////////////////////////////////////////////////////////////////////////////////// B 3 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// B 8 = * ) //////////////////////////////////////////////////////////////////////////////////////////////// $ 7 3 ///////////////////////////////////////////////////////////////////////////////////////////////// $ 7 7 * //////////////////////////////////////////////////////////////////////////////////////////////////// C //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// " 8% 8 /////////////////////////////////////////////////////////////////////////////////////////////////// " 4 * //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// D 3 > ,* //////////////////////////////////////////////////////////////////////// (! 3 * //////////////////////////////////////////////////////////////////////////////////////////////////////////////// (! 3 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// (! * ////////////////////////////////////////////////////////////////////////////////////////// (! * ) /////////////////////////////////////////////////////////////////////////////////////////////// (B /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// (C ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// (C ; ////////////////////////////////////////////////////////////////////////////////////////////////////////////// (C 9 //////////////////////////////////////////////////////////////////////////////////////////////////// (( 9 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// (" 3 //////////////////////////////////////////////////////////////////////////////////////////////////////////// (" , 3 * /////////////////////////////////////////////// (" //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// (# 3 8 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// (# * //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// (# % &5 /////////////////////////////////////////////////////////////////////////////////////////////////////// (E 2 3 8 /////////////////////////////////////////////////////////////////////////////////////////// (D 3 8 ///////////////////////////////////////////////////////////////////////////////////////// "! 7 * /////////////////////////////////////////////////////////////////////////////////////////////////////////// "! * ///////////////////////////////////////////////////////////////////////////////////////////////////////// "$ ; /////////////////////////////////////////////////////////////////////// "$ & ; //////////////////////////////////////////////////////////////////////////////////////// "( * 3 8 * ///////////////////////////////////////////////// "# * 7 8 //////////////////////////////////////////////////////////////////////////////// "D ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// "D , /////////////////////////////////////////////////////////////////////////////////////////// "D ; =% //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #! = ////////////////////////////////////////////////////////////////////////////////////////////// #! /////////////////////////////////////////////////////////////////////////////////////////////// #! > ; & . ) ////////////////////////////////////////////////////////////////////////////////// #! > 2) * ///////////////////////////////////////////////////////////////////////////////////////////////// #B 8 9 7 //////////////////////////////////////////////////////////////////////////////////////////////// #B 3 9 8 ////////////////////////////////////////////////////////////////////////////////////////////////// #B = 7 8 ////////////////////////////////////////////////////////////////////////////////////////////////// #$ 8 9
; (/B (/B/B (/B/$ (/B/C (/B/ (/B/( (/$ (/C (/ (/ /B (/ /$ (/ /C (/ /
"/ "/B "/B/B "/B/$ "/$ "/$/B "/$/$ #/ ; #/B #/B/B #/B/$ #/B/C #/B/ #/B/( #/$ #/$/B #/$/$ #/$/C #/$/ #/$/( #/C #/C/B #/C/$ #/C/C #/C/ #/C/( #/ #/ /B #/ /$
*
#/ /C . 8 ////////////////////////////////////////////////////////////////////////////////////////////////////// #$ #/( 9 = ) 7 ////////////////////////////////////////////////////////////////////////////////// #$ #/(/B * 3 //////////////////////////////////////////////////////////////////////////////////////////////////////// #$ #/(/$ 4 3 ///////////////////////////////////////////////////////////////////////////////////////////////////////// #$ #/(/C % &5 = 3 //////////////////////////////////////////////////////////////////////////////////////////////// #C E/ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #( E/B * /////////////////////////////////////////////////////////////////////////////////////////////////// #( E/$ 5 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #" E/C ; & /////////////////////////////////////////////////////////////////////////////////////////////////////////// #" D/ & * /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #D
List of Abbreviations F F
*
3
**
/
/
F /
>
F)
'
F
/ &
, G
=
/
* /
9
/
,
=&
/ ! **
F
8
, ,
* 5 / : >
7* /
* &
"# F % * & /
6
,
)
*
*
=
=
) &
9
/
,
*
&
,
8 9
/
/
& . &
* &
*
: / '
F > ' , &
=&
/
2 * /
%F
F>
&
/
" F%* ) 8 9 6 *
&
/ *
$!! /
F
# $F
9
/
,
,
* *
8 9 *
List of Figures ;
$/B = ' , & / * * ////////////////////////////////////////////////////////////////// " ; $/$ = , H 6 /8 * * = * &5 ' & * / ////////////////////////////////////// # ; $/C = ' I$J//////////////////////////// E ; $/ = ' * / //////////////// B! ; C/B F *& , * ? @ * ? @/ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// BC ; C/$ F =3 * / ////////// B" ; C/C F 7 * ; //////////////////////////////////////////////////////////////////////////////////////////////////// B# ; C/ = * / /////////////////////////////////////////////////////////////////////////////// BD ; C/( F * ' * , * / /////////////////////////////////////////// BD ; C/" F * , * ; C/C/ ///////////////////////////////// $! ; /B F * 7 * * 0 /////////////////////////////////////////////// CB ; /$ F 7 * ; 0 / ////////////////////////////////////////////////////////////////// C$ ; /C F 7 * ; / //////////////////////////////////////////////////////////////////// CC ; / F ; * / /////////////////////////////////////////////////////////////////////// C ; /( F 7 * ; 7 / /////////////////////////////////////////////////////////////////////// C( ; /" F 7 * ; 3 / //////////////////////////////////////////////////////////////////// C" ; /# F * / /////////////////////////////////////////////////////////////////////////////// C" ; /E F * ; / ////////////////////////////////////////////////////////////////////// C# ; /D F 3 * & & * * 7& / // C# ; /B! F * 9 ; /////////////////////////////////////////////////////////////////// CE ; /BB F 9 / ////////////////////////////////////////////// CE ; (/B F * 7 * , ////////////////////////////////////////////////////////// B ; (/$ F + , & /////////////////////////////////////////// $ ; (/C F 7 * ; ButtonBoxTrigger/ ///////////////////////////// C ; (/ F ButtonBoxTrigger ///////////////////////////////////////////////////////////////// ; (/( F 7* 6 ParseTrigger /////////////////////////////////////////////////// ( ; (/" F ButtonBoxTrigger--update ///////////////////////////////////////////////////////////// " ; (/# F 8% 8 ; * / ////////////////////////////////////////////////////// # ; (/E F & 8% , * * , / ////////////////////////// # ; (/D F 7 * 8% 8 / ///////////////////////////////////////////////////////////////////////////////// E ; (/B! F + 7 * ' A% 9 / ////////////////////////////////////////////////////////// E ; "/B F H2 6 * 6 //////////////////////////////////////////////////////////////////////////////////////// ( ; "/$ F H 6 * * , / //////////////////////////////////////////////////////////////////////////// ( ; #/B F 7 * * ///////////////////////////////////////////////// (# ; #/$ F 9 @/
, ' ' ' C) >9 * .
*
* *
* **
*
*
&
* /
7
* + / &
8 9
&
'
/
1.2 Intended Audience * / ,
&
,
, * 5
,
= * 5
/ * >
*
* 9
. , *
/ , .
&
. *
*
&
' 7 * ,
&
/
@ I$J * * =* *
,
', .
*
*
,
@IJ , , /
*
8 9 ,
F *
'
* >
/ *
>
?>
&
& ,
*
'
*
*
> 9/ '
/
ICJ * 5 6 , .
,
& , '
, / ;
H > 6/ & ' '
& H > 6,
1.4 Project History * 5 * &
3
, *
,
? 3 $!!C & ,
,
> / *
3 *
, .& @
? 3 '
I(J/
5
@/
'
&
: *
, *
7
'
,
*
,
,
* 5
.
$!! /
7
&
, * 5 , '
/ '
/
'
5
* * &
I"J F
* ) 4
, .
. 8 , .
4 *
H 5 ',
>
&
,
* ',
*
6
* 5 8 C/
H *
7*
, 6
&
*
&
H * , , /
' &
)
*
$!! =(' *
' * ,
&
&
'
* ,
*
8 9 6 * & / 8 9
,
' 7 , .
$!!( =
&
,
,
/ &
5 &
' * *
* *
*
*
* /
6/
' * 5
& '
/
*
' * *
$!! / 9
=* * =&
'
=* 7*
= ,
,
&
' & &
/
&
** *
'
'* H
& & *
. &
& ,
,
/
&
8 9
'
,
=
&5 ' &
* ,
6'
/
&
**
8 9
*
'
&
, . , .
3 $!!B=!C' **
' / ;
' '
* *
6/
& =
. F, *
, , 8 9
* *
'
*
'
'
/ * *
*
>
* 7 ,
*
=
I#J/
1.5 Project Goals ;
'
,
= . * * *
= IB!J 7* 6
* 5 * , % 29
& &
* & ,
, IEJ'
* ' = *
/ ;
'
&
* & & /; 2 * IDJ' & +
%*
/ *
' 7
& + /
* ' & *'
*
'
C) *
'& * . &
=
+
' ,
/
'
* *
*
=
8 9 *
'
* &
7 * 5
*
* ' & *
* *
& * =&
&
6
=
&
* = *
&
* * ,
/ 7&
/ * 5 '
,
C' 8 9
* /
*
%
/
* *
* .
' &
=
' *
8 9 &
* *
& /
.
/ ,
* 5
=
/
,
0 8 9
& & &
@'
%' IBCJ & & * * ' * & , * = = / = * .
&
, ,
*
, '
/
& ,
*
& =
&
* . =
*
'
= *
* *
C) *
* , /
* /
? *
=
IB$J
**
* .
9
! " IBBJ' #$ ! &
'
*
7
&
*
* *
&
8 9
=
&
/
1.6 Thesis Structure * *
,
, ,
&
' **
, . * 8 9 *
&
>
, &
/
,
+
*
/ *
.
/ & ' , *
'
'
* * 5 /
;
=& 8 9
* ; ,
/
& .
,
5 '
,* *
',
7
&
8% *
8
' *
'4 &5 ,
& /
& *
/ ,
*
/
* *
7 * 5 /
'
,
*
' &
* * 5
*
*
8 9 *
/
'
2. Background Literature > 96
&
=* H *6 & , , I$J/ , * 7* /
/ *F *
.
* & *
7
,
'
7
,*
*
,
&
H
*6
7
*
& +
,
/ =&
=* / 6 ! " IBBJ *
,
* *
& 0 +
, . &
& 6 &
*
IB J
&
&
' * C) &
*
& '
*
'
,
.
+
,
/
,
>9
&
&
>
&
F*
*
*
/
2.1 Artistic Virtual Environments ,
* )
>
*
'
, .
'
/
2.1.1 Char Davies % , .
*
, .
= = , &
7
=. , , . , .' ' * * 6 &
*
>9 , *
IB(J BDD(' * ,
.
&
*
) I$' CJ/
&
& ., &
/ /
'
'
& &
IB(J/ 7
* -
' ,
/
& *
* / $!'!!!
*
IB"J
F 5
>9
&
* ' ?
;
' $/B@/
H,
6
'
()* =
'
,
*
IB"J' ' /
*
&
/
*
/
BDDE'
,
& &
& ?
, .
. ,
* 7 *
* /%
,
& &
* , ;
& '
& $/$@/
&
*
' ',
'
* )
, .
' , IB(' B"J/
*
' ,
'
()( = , H
6 *
/8 &5
*
' &
*
*
=
/
2.1.2 A Course in the Creation of Artistic Virtual Environments 7* ,
2 , . *
, %
'
'
&
> *
%
>
,
*
*
*
=
** & .
' , * /0 * / * ,
,
&
&
. , 6
&
' * '
*
,
& ' * *
* *
& &
&
*
*
/ *
@
*
*
&
'
% *
* &
, .* /
' &
'
, . ' . '*
I$J/
,
'
* & .
/
, ? , ? ; /
$/C@/
, > /
& *
,
&
&
* &
/ & ,
'
()+ =
'
I$J/
2.2 Past Attempts at Solutions &
* , . ' ,
'
*
*
=* *
*
, * 5 / %
* &
* 5 '
'
/
2.2.1 XP %
*
, >
' ! '! ( ) , ' %& IB#J/ , .& , *
' ,
* *
* * *
&
=& &5 &5 K + ' K ,- ' , K & G & , / *
*
& ,
-
&
/ , 7
/ .
' A
7 *
'
*
,
* *
/ &
*
* K
$' , 7
*
&
7 *
, *
7 .
* '
C)
& , *
& * * , ,
*
' &
!
.
* & * '
' *
/
*/
*
. &5 ' ', .
* '
&
6 +
/
IB#J/
2.2.2 SE . IBEJ : / &
&
*
3 3
' , *
=
.2 =
?BC , . @ > /
,
* *
+
',
*
7
'
,
= &5 ** , & = &5
, &5
&
+ , * ,
/
,
*
7*
& * 7 &
= ' @'
, *
*
, , . ', /
*
/ *
* * 7 ' * , * & & 2 &
,
&5 ' * /
& *
/
IBEJ/ % &
. / *
* / 3
?
/ . *
*
+
* /
* '
*
&
&
/ 7
*
, '
'
2.2.3 Other Systems &
* *
% = * /
IBDJ/ % ' & ' ,
*
,
*
/ '
* *
*
* '
'
*
*
*
*
*
,
'
*
'3
& / ,
& 011# IB!J / , * = = * '*
'
'
(), =
= /
*
I$!' $BJ/ 7 +
*
F
* *
%* * & ,
2 =& '
C)
* * *
, * +
'
*
?
;
/ * / 8
* ' $/ @/
/
2.2.4 Common Features and Limitations &
&
*
'
/;
'
=
=*
* , ' *& 9
,
*
&
& /
&
>
=
* 7 &
** '
/
'
** *
, '
*
'
& ,
IB J
& * *
! " IBBJ ' *
C) >
&
'*
, ,
&
/ /
/ ' ,
,
'
&
&
•
*
H
6,
* •
*
*
* ' *
'
* 7 &
&5 IBEJ/
' • + ,
* IB#' BEJ@
'
?,
&
,
'
& 5 * /
*
.
*
*
& /
' * 7
= 8 9
/
,
*
, '
*
IB#J'
* *
&
•
, ,
'
-
,
/ IBDJ' /
'
7
'
3. INTRAC *
7*
8 9
*
&
ICJ
'
,
* 5 /
3.1 Basic Structure 8 9 , &
* =&
*
/ . '
'
' *
*
/ *
*
/
,
'
+ ,
*
'
* & *
*
'
F* &5
=
*
'
, , =
IB#J' & & ,
8 9
F
*
;
C/B/
&
* *
*
+)* F
*& ,
* ?
* =& *
/
@
* ?
@/
3.2 Activation Propagation * * & &
, * &
'
+
,
*
*
' &
*
/ /
& $
B
*
B
&
, * /
,
&
* '
' ?
, /
7
* *
?
* @' & 7 * '
8)
@/
, &
/) *
&
* * $ , $ , F *
/
& ,
'
C/ /
.
* * H = ,
6
** * *
/
3.3 Node Types and Functions 8 9
*
,
F
* B/
* *
$ F
&
*
** '
* $/
& ,
' &
/% , ' * I$' B#' BEJ' & * ' .+ * * 8
&
*
6
$ , $
.
*
+ $ 2
/
&
*
&
/
' $
. *
$
" '
* * * 8 A% 9/
/
* =&
*
* ' * '& * * &
* *
8) ' % 9 * 7
&
* , * &5 /
$
&
,
'
,
* *
/
& *
'
& *
,
/
& ' * *, & 6 *
&
*
C/
* *
' '
$ ' / ; +
* * '
* /
& = =
$ ',
$
&
/
$',
2
*
8
/
& /
3.4 Node Options *
, * *
7
',
;
*
' * *
** *
&
&
* &
/ &
*
& *
, /
& ' , & 7* *
/
'&
/ '&
H ,
6
* &
/ ' *
& /
&
, '
, &
*
, * &
&
&
+
&
& '
&
/
' '
,
'
*
/ '
7
/0
/0
H
7 * *
6
* * /0
& ' /
& @' ,
&
& &
&
' =
=
&
* * ?,
/ '
* / 7*
$
?/ /
, B
$
& ,
,
/ @'
/
3.5 Activation Handling &
= ?) *
*
* 2@/
. =,
) 2 ? @/ 8
*
& * )
$
, ,
* *
' &
' / &
=
' ',
* *
&
8
*
F
* *
'
'
H
=*
6
/
* /8 & , * &
& ?
&
* & * * *
.
, ' 6
/; @' 8 *
/ & &
9
&
?*
' , *
8
'
'
'
8
' '
/
= /
/ 8
7*
* *
'
@/
8 *
& , '
. *
F
$
* **
7 H
/
'
'
-
/
&
* *
* * & * * + / * * *
' * * * '
8
'
&
* =
C/
6
/
*
$/
H
F
*
, *
B
2
* 7/
/ =* *
B/
= /
&
&
& 8 9
/ , * &
=.
' @
&
* * &
* F ?
*
* 6 ;
8 * '
&
7
C/$/
.F
*
/
'
+)( F
=3
*
* & &
* = /
' &
*
,
7
,
& &
&
* & . /
+
=
F
& ,
/
'
H
'
6
, ,
, ,
' * 6 I$$J + ,
H
*
&
'
/
, 8
* , ,
*
& ,
/
,
.
'
/
F
& '
.
'
*
'
'
&
' &
,
+
&
/
3.6 The FLCL File Format 0
8 9
'
3
**
/ *
*
;
/
*
"2
" ICJ
F
7
= &
*
/ ;
C/C
,
*
'
& 8 9 *
= 3 * * &
7
/ 8 /;
* ?
*
&
'
*
7* * ' ,
7
& , * #/(/B/
& ,
3
'& '
*
/ ,
%)
*
* 7/ & * & * /9 *
', &
/
7 ,
3
*
' **
3
* '
*
&
;
' ,
.
&
*
%)
&5 = ' .
/ ;
'
@ ?*
' & 7 @/
3
& /
'
,
'
&
4.3.5 PhysTrigger &
8
/ &
,
*
7 '
'
,)0 F
*
& ,
/ ;
/#/
/
;
7
*
+
* '
,
;
/E/
PHYST[ TARGET: Sphere1 THRESHOLD: 100 BTRIGGER[ OBSERVERS[ PhysT1 T BounceSound T ] BINTRAC[ RESET: T START: T GROUP[ NAME: PhysT1 ] ] ] ] '
,
8 9 * 7
,)1 F
*
;
/
'
&
/ &
&
& '
* /D/
;
&
&
&
,
. '
! " #
) * ! " ##
! ,-
! " ###
! $ . ! $ .
)
!
! ,-
+ $
% &
' '
' '
,)2 F 3
*
&
' &
H G
= G
* 7 &
&
&
*
**
/ &
6& /
,
' &
%
( * 7&
*
* * '
* *
,
/
* 7
/
4.3.6 PhysReaction *
& '
& * 5 F , .,
/
*
* '
. 9 '
7& * 8 9
&
*
= =&
* &
/
9 &
/ " / ; *
& , ' $/ 7 * ' ;
.
F
, &
9 *
'
+ 7
;
"
* , *
*
> 8 9
*
*
/B!/
PHYSR[ SPHERE[ NAME: Sphere1 POS: [ 0.0 0.0 5.0 ] ] BREACTION[ SRESET: T BINTRAC[ RESET: T GROUP[ NAME: ResetSphere ] ] ] ] '
,)*3F
*
9
' H *
H9
B6
*
/ *
* *
7
* *
'
* &
6
.
&
H
/ 6& ,
/
=& ' *
* "
9
&
/
'
&
'
;
ICJ ,
*
* #/B/
*
'
8 * *
,)** F
&
*
@&
;
, 7
*
8 9 ?
& @/
9
'
, 9
6
/
6 ;
?,
7 * * * AUTOSTART[
' . &
; *
6 &
*
: 4
* /
/)/
4.4 Implementation Summary & *
/B
* ,
*
& 7
/ ; /)/
4
56
*
'
*
* '
/
0
'
;
* /
/ * ,
'
*
;
*
/
*
/ 7*
*
*
/
;
* /
7
*
7* *
3
*
*
, *
*
*
*
& * &
/
* 7
;
* *
,
*
/
7
)
; /
7*
& )
& 7=
/
* /
/
*
& 7
;
7/
* /
/ ,
&
;
9
* &
7
&
=
/
!
,)* F
;
* /
*
* ,
* /
/
/
&
*
/
5. Further Additions to INTRAC * * 5
& F
, ,
7
* '
*
8%
8
;
'
& ,
,*
*
&5
/
5.1 Hardware Interface API % * = *
ICJ *' *
* *
H * *
6' , /
&
* 7
* 5
, '
,
* * / ** *
/
5.1.1 Motivation *
& ,
**
*
/; , '
'
& %*
/ 2 *
%* *
*
) ' 7
, & ,
* 5 = @ ,
*
* * &
' *
&
;
* *
' ICJ
.
,
& /
, ** *
' *
'
& * &
&
8 9
. '
8 9
'
=
& /
,
* *
' ,
, *
' &
?* * * &
*
&
8 9
' 8 9
'
* /
&
&
, > /
, * /
,
* ' 8 9
*
7 * *
* ,
*
*
F
*
*
*
/
*
&
* *
* , **
*
?/ / @' *
*
,
/
*
/
* )
% /
! $ .
/
'
-)* F
0 0 0 * 1'
%
*
(
7
*
,
/
5.1.2 Node-Type Derivation 7 *
/
, * ' . , /
* *
F ,
*
&
' & *
,
7* *
&
* '
* 8 9 * , *
** * /
&
8 9 ,
*
'
*
,
*
7
*
*
/
B
-
extern "C" __declspec(dllexport) intrac::BaseTrigger* ParseTrigger( vector::iterator input, vector::iterator EOF ); extern "C" __declspec(dllexport) BaseReaction* ParseReaction( vector::iterator input, vector::iterator EOF ); extern "C" __declspec(dllexport) BaseConditional* ParseConditional( vector::iterator input, vector::iterator EOF );
'
0
-)( F
+
' input' * ' , & * & *
* '
,
,
&
&
/
*
.
;
7
/0
.
HJ6
/ *
* &5 ** *
&5 ** * * ' / ; * BaseTriggerGReactionGConditional/ ,
* ' .
,
/
5.1.3 Extension Mechanism ?H/ ;
, 6 /
= * 0 ;
& , *
*
* 7@
H/ 6 7
*
G addInstruction ( intrac::UnaryInstruction< intrac::PhysSphere, void, osg::Vec3& >( intrac::PhysSphere::setRadius, parseVec3 () ) ); } else if ( read() == "RADIUS:" ) { incPos(); node->addInstruction ( intrac::UnaryInstruction< intrac::PhysSphere, void, dReal >( intrac::PhysSphere::setRadius, parseFloat() ) ); incPos(); } else if (...) { . . . } else incPos(); } incPos(); } else if (...) { . . . } else incPos(); } if ( notEOF() ) incPos(); else printMessage( "Unexpected end of file!" ); } '
* ,
parsePhysicsR
0)*. F
' ,
* '
,
' &
+
/
;
parseMessageNode & /; '
/
, &
, %
& *
*& ;
;
*
/
#/B#/
osg::ref_ptr PhysSphere::getInstruction( Serialiser& s) { osg::ref_ptr result; if (s.read() == "RADIUS:") { s.incPos(); result = new UnaryInstruction< PhysSphere, void, dReal >( PhysSphere::setRadius, parseFloat() ) ); } else if (s.read() == "POS:") { s.incPos(); result = new UnaryInstruction( PhysSphere::setPos, s.parseVec3() ); } else if (...) { . . . } return result; } '
0)*0 F
0
3
8
(
getInstruction
* *
! A
6 ; / *
& ,
*
' ** * '*
' .
*
/
* getInstruction &5 /
' read getInstruction & ; #/BE/
* /
'
/
&
getInstruction + &
read
void PhysBox::read( Serialiser& s ) { while (s.read() != "]") { osg::ref_ptr inst = getInstruction(s); if (inst.valid()) inst->execute(this); else s.incPos(); } s.incPos(); } '
0)*1 F
read
read
* *
*
' read
* incPos &5 /
/
&5
** *
getInstruction
'
'
/ G *
' = G
/ /;
'
&5 getInstruction read
'
., .
,
,
7.2.4 Implications for External Nodes , + Serialiser & ReaderWriterFLCL &5 , osgDB::ReaderWriter' , 7*
*
, * 8 9 / intrac::Serialiser ; , 7 7 &
' ' & * HLOADLIBRARY[ FILENAME ]6/ 7 ** * & ' (/B/ , ' & , 8 9 / % 7 7 / & /
'
*
, '
'
& 8 9
& 9
/
&
, ;
,
'
&
&
*
/
&
; ; *
, '
9 ' *
' F&
,
, 9
;
&
, & ;
9
8 9
7
*
*
*
'
/
7.2.5 Conclusions *
; & . * , ** * * 7 '& , * ' * * ' . *
,
* /
, ;
'
=*
& *
7
, '
* '*
= .
/ '
F& =, . , /
7 =* /
& *
*
/;
& &
9 6 *
. *
, 7
,
* *
* 5 *
7.3 Integration with an Interface *
&
7*
'& / +
' '
*
* * 5 * '* , * &
/
** * 5
, *
& $
& , &
= *
'
& ,
& & 8 9
/ ,
*
'& ,
/
,
&
/
'
&
' /
'
'
*
/ &
6
,
7.3.1 FLCL-Only 0
' *
8 9
** +
'
;
' *
=& / * 5 '
* *
&
&
+ *
=
*
7
'
+
/
& ,
&
./
7.3.2 A Stand-Alone Interface *
'
' ,
/ * *
6 * * =
* * ', &
; &
,
/
*
&
&
*
,
*
/ 7
'
, *
*
/ * 5 /
7.3.3 An Integrated Interface *
& ,
0
&
*
8 9 ,
'
, ?
* , ' ,
'
,
, 6
*
*
, , @'
/ ,
,
, /
+
,
6/
*
* /
&
F
,
.
&
, 6
, /
& * * &
'
** *
, .
& & &
*
&
/ * 5 6
* 5 ' ,
* *
/
/
' *
&
*
/ ,
,
&
&
,
'
/ %
7 /
7.3.4 Visual Feedback for Designing * )
= *
* *
* 5
& &
, &
&
+ /
6 ' * / 2 &5 . * .
&
'
'
•
,
/
. =
& &
'
', &5 '
. .
, '
/ &
/ &5 , , /
* &
•
H
6' &5 / ' ,
'
&5
,
,
* .
*
, = *
'
/ ,
/
•
*
&
* 7
/ >
2/ & ' > 2 , 6 * @'
/ & . ,* / ;
&5 * ',
8 9 *
' ' +
&
7
+
&
,
' ?
'
&
*
& &
*
*
, 7 &
'
* / %&
&5 / '
. & *
* . *
/
6
7
&
&
*
&
* ,
'
,
*
'
/
7.3.5 VEBUG Development &
, /
*
* *
*
&
'
7* *
&
'
*
+
*
>
2
/ , * /
*
.
7* &
* ', & &
, * /
& .
, .
, & .'
' =
'
&
8 9
8 9
,
,
/% ,
7.4 Core INTRAC Extensions 8 9 * *
'
ICJ'
/ '& '
& ',
* *
,
&
& &
*
/
7.4.1 Movie Reaction Node 3 8 9 &
** 6
, *
, / * '
& %*
+
&
* 5
&
*
** , IC(J F /
% 7
A 7*
*
,
2 * **
' &
& ' /
**
0
% 2
0 7
, * , % 2 &
,
& 7*
*
*
=
, /
7
*
'
% 2 ** IDJ/
'
& .
&
F
* /
8 9
&
=*
7
'
.
& *
/
&
&
& & , .
&5
* 5 /
7.4.2 Hit-Box Trigger Node , &
7
* &
* 7
?* .
@/ 0
,
'
=& *
*
* ** ,
7
'
&
**
/ 8 9
6
'
6
=&
,' ,
&
/
7.4.3 Click Trigger Node * 6
*
ICJ
.
=
.
= *
'
*
,
&
/
' #/C/('
*
? '
+ *
* ,
* & *
, .=
& .
/
' .
> =
2
@/
/
7.5 Rigid-Body Dynamics Extensions 8 9 %) 7
6
=&
+
, /
&
&
'
*
'&
*
*
&
7.5.1 Simplified Meshes * * 7 /
* ' , ,
' *
* 7 / ' , =
&5 *
& *
*
&
& '
*
*
&
'
=
=
,
&5
@/
& & /
6
* ,
*
? *
3
*
/ ,
% 2*
* '
=
&
'
& 7
7.5.2 Joints and Motors %)
*
7 ** / 8 9 & & H* 6 &5
* /4 '&
5 * ,
3 * /
*
,
*
&
+ F
5 '
= , '* *
* '
& , ,
, * 7 &5
& &
& & *
/ ; ,
/ 7
* ' /
7.5.3 Object-Level Materials ' , *
'
*
,
& * 8
+ ,
&5 ' '
* & '
, , ** *
*/ '
&
*
&
&
0 *
/ %) , & /
8. Conclusions * ,
*
'
*
'
&
* 5
/
8.1 State of Implementation ! 0
/
'
8
&
,
&
*
;
* *
*
/
/
& / 7
,
8
,
=
7
7
8
' &
,
,
&5
.
*
/
8
*
/
*
/
/
*
* ,
*
.
'
;
7
/
7
* /
/ ,
8
8 L
/
8
8
* /
,
& 7
* .
;
/
&
8
:
*
&5
*
*
8
&
* *
, /
,
&
;
*
/
/
/
* *
8) 8
/
,
&
;
*
/
%9
*
/
*
/ ;
&
*
8
/
A% 9
,
8
,
&
;
*
/
/ ;
8
&
*
/
/
8%
;
8
&
*
/
/
/ 9
*
8 , 8
*
/ 9 9
8
'
0 ,
* &
' 7
* *
&
, /
,
&5
* /
&
, &
/
;
/
/
*
/ 7*
/
3
7
*
/
8
*
/
8 9
* &
7
&
=
;
*
/
/
56
/
0
'
;
*
/
/ *
,
'
*
;
*
/
*
/ 7*
*
*
/
;
* /
7
*
7* *
3
;
& 7=
*
*
/ 7*
&
!
*
/ *
*
*
&
/
* &
1)* F
*
/
8 9
8.2 Project Success * 5
*
, &5 ' ,
* &
,
8 9 .
' *
5
,
,*
&
/
,
& * '
*
, /
+ *
'
' &
, =
'
,
**
*
' ,
*
&
/
& , * 7 , =&
,' ' ,
/ *
, *
/ 7*
= , ICJ/ 3
*
'
=& &
' +
, * F . , 8 9
*
*
' /
*
&
*
*
&
* 5
' *
F
& &
*
,
6 ,
'
7*
&
'
+ *
=&
/
, ,
*
7*
,
F
& & *
& '
& , *
/
8.3 Future Possibilities * 5 & ** 8 9
& *
=
/
8 9
'
*
' / & * ' ,
, /
,
' ,
*
, *
, *
&
'
=*
, & * ,
, +
*
/
,
'
+
& , '
/ '
;
&
/ #/C'
=
*
* K
&
*
, / % '
8 9
,
K
' K
& *
, *
*
*
* , & .
>
/
* *
'
9. Bibliography IBJ
%/2
'
I$J
2/0 / Q >
I(J
'= '
/)
4/ R
. ' 2/
' :/ '
IEJ
/
'R
IDJ
9/ %
' R% *
* 2
IBBJ
0
IB$J ,
IB J
IB"J
IB#J
'
' $!!C/
'
' *
+ )
*-GG,,,/ *
* /
G/
& / C!BDD"' **/ $(=$E/
>
9
4/ 'RB
'R$!!(K
*-GG,,,/
'R$!!(K
C /
G/
$!!C'R $!!C/ #'R$!!(/
3 7 E'R$!!(/
'R
#/B'R$!!(/ *
$'R$!!(/
4/ 'R.
' R%
-
&C 2
* ' / *-GG,,,/
IBEJ
0 &
/) 'R * U V * 'R * 2 BD"=$!B/ )/
D
' /1 , ' / * > / $#' 4 ' $!! ' **/ B=BB/
2 * 0 &
' R3
/) 9
') */
/
% 29
& 'R
IB(J
*
% $!!(K / */
T
'R
.' RC
IBCJ
'R
' $!!C/
' ' $!! /
'3
,' $!!(/
IB!J
-3
2 ' 8 ' $!!B/
'R*
% G
/
$2 3 /
&
3
.
I#J
" '
*
; /+ /
*-GG,,,/ I"J
$"
' R> 9 - : >
'3 S-
= '
'3
R
&
0
*
:/ 3
IJ
) / / & ' R0 'R*
=9
* ICJ
'
A3
' 4/ /
3 /2 'R , * 3 4 * ' $!!C/
, '
* ' ' 9/
'&
' '
'3 /9 ' 7 & 'RBDDEK / G* * G* * G7*/
> / 7
/) ;
'
>
. ' BDDD' **/
' RA -
DEG/
> *
:-
9
,
* '%
'R . '
IBDJ
Q/
. ' 2/ 3
' *
' I$!J
I$BJ
3 / * *+
/
/ / / $!/
I$"J
/:
I$#J
/
I$EJ
'! $
:/
. 'R
-
/ . 'R BB=BE/
ICBJ
9/
IC$J
R
ICCJ
)/9 & 0
'
2 '
'R
%*
/9 / RA
)
'R
=
'8 ,1
.- 4
'R &
*' R
& 'R$!!(K
*-GG7
$!!(K
*-GG
/ C' BDD"' **/ B =$$/ '
G/
/ ' BDD#' **/
'
/
/ ' BDD#' **/
G/
*-GG,,,/
/ QX ' /9
'R +/
' BDDD/
' $!!(/
'R$!!(K
;
/ C' BDD"' **/ B$=
0
=
')/3 ' ' / C' 9 / 3
' BDDD/
=
'R
%
/;
'
'R
*
' $!!C/
'
=
0 &
. ')/ W *& = ' BDDE' **/ $DC=CB$/
5
.- 0 /
-
9
$'
:
'8 ,1
'
C-
"
'3 / /9 ' >9 'R $ / 8 , 1 .'
-3
)
* '0 /
'
'R
=
,
$$
!
'
-
'3 / / * !
*
8 7 ;
$
/ . 'R B(=$"/
IC!J
IC(J
B-
$-
'
' 3 /4/ . -
$
'
/
&
& "
* .
L ' $
'>
3 / / 'R $ * 2! " 3 ' $!!C' **/ B!!=B!#/
-
. '
'
* $
2??$ A '' $!!B/
. 'R
I$DJ
IC J
=0
'& "
' &
' / ' / ' R8 , , , :0 2! ' $!! ' **/ E!=E#/
--
= 'R* 9
'> ' $!!C/
'R . '4 *
"/ %
$
*
. 'R
' 4/= /
)/ / &
I$ J I$(J
LL ' /
7 '3
2 *
, '
3 / LL ' 4/= / / ' /8 & $ * 81 ' 3
I$$J
I$CJ
*
/
2??
/ 'R '3
'
G/ L 'R
-
/ B!' BDDD/
=