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 , /

<<

,

* *'

, .

/

'

5 ',

+ / ;

'

, . , 7 *

' * , 8 9 * 5 ,

*

* 3 *

*

,

* & 8 9 * 5 , ' &

. /

,

&

*

'

) 2

**

/ ,'

,

* *

'

, .

&

+

,

'

/ 8 9

'

/ 4 *

:

' /

3

' /

**

, .

=

* '

'

,

5

Abstract >

=9

* & =*

+ *

*

' ? > /

> * , 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 << 7 &5 /////////////////////// (E ; #/C F << 7 UnaryInstruction PhysSphere::setRadius////////////////////////////////////////////////////////////////////////////////////////////////////////////// (E ; #/ F 3 8 + ; #/B/////////////////////////////////////////////////////////////// (D ; #/( F ; * 3 8 ////////////////////////////////////////////////////////////////// (D ; #/" F * 7 * 3 8 / ///////////////////////////////////////////////////////// "! ; #/# F 7 * , 3 8 * //// "B ; #/E F & & 3 8 //// "B ; #/D F ; * : ///////////////////////////////////////////////////////////// "$ ; #/B! F parseChildren ' parseKeyT/ /////////// "C ; #/BB F KeyTrigger::read ' * / ////////// " ; #/B$ F * * << ; / //////////////////////////////////////////// "(

; #/BC F parseChildren ' ; * //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// "" ; #/B F + PhysSphere //////////////////////////////////////// "" ; #/B( F + PhysSphere / ///////////////////////////////////////// "" ; #/B" F parsePhysicsR ; / //////////////// "# ; #/B# F * * getInstruction ' * * / ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// "E ; #/BE F * * read ' getInstruction //////////////////////// "E

List of Tables &

C/B =

&

/B F

8

, &

E/B F

* & ICJ * * 5 / ////////////////////////////////////////////////////////////////////////////////////////////////////////// $B * * & * / ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// CD * 8 9 //////////////////////////////////////////// #"

1. Introduction 1.1 Topic Overview 9

'

&

* 7

& 7*

C)

F>

, . & * * /1 ', 7 , *

+

*

, . IB' $J/ * &

&

*

9

C)

' /

?> 9 @/

, ' ' ' C) >9 * .

*

* *

* **

*

*

&

* /

7

* + / &

8 9

&

'

/

1.2 Intended Audience * / ,

&

,

, * 5

,

= * 5

/ * >

*

* 9

. , *

/ , .

&

. *

*

&

' 7 * ,

&

/

<<

/

1.3 Terminology ? > @ 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

,

*

'

DATAPATH[ .//data// ]DATAPATH AUTOSTART[ ] GROUP[ NAME: Root CHILDREN[ KEYT[ KEY: j DESC: [ Toggle switching floors hallucination ] BTRIGGER[ OBSERVERS[ KeyFloor T SwitchVisible T RotateFloor T ] BINTRAC[ RESET: T START: T GROUP[ NAME: KeyFloor ] ] ] ] SWITCHR[ SELECT[ GROUP[ NAME: Normal CHILDREN[ FILE[ /common/models/floor.osg WardFloor1 ] ] ]

/* End Group */

GROUP[ NAME: Psychotic CHILDREN[ MAT[ POS: [ 0 0 0 ] GROUP[ NAME: RotTrans CHILDREN[ FILE[ /patient02/models/floor2.osg WardFloor2 ] ] ] ] MAT[ POS: [ -12.7087 23.2878 0 ] GROUP[ NAME: Clouds CHILDREN[ FILE[ /patient02/models/Abyss_Cloud.osg AFloor ] ] ] ] /* End Mat */ ] ]

/* End Group */

] BREACTION[ SRESET: T BINTRAC[ RESET: T GROUP[ NAME: SwitchVisible ] ] ] ] ] ] '

+)+ F

7

*

;

/

8 *

, ' *

*

*

*

* * * = * '

*

,

'

, 9

'

* , ; ,

* ', , *

* *

& *

HBTRIGGER[6 9 7 * : /

' 6 &

8 HBINTRAC[6 . / 8 H 6

/ /

/

*

HBREACTION[6 ' * 6 . H56

&

*

.

/ / *

2

'

*

'

' /

& *

** * *

&

;

*

/

3.7 VEBUG >

2'

>

) & *

/ .

' *

7

'

&

+ . * . * & ' 7 &

> * &

* 2 * 7 . , * 7

& . ' / 7'

7

;

/ , * 5 ' , .

> >

, *

, /

/ 6

, '

2

'

' '& 2 * * 5 / *

&

7 *

, ,

' , '

#/C

3.8 Usage examples & *

,

* /

'

7 ;

* C/ /

'

'

+)- F

* 7 * ' ', ' ** &

&

H

6

7 , *& ,

*

*

;

' *

C/( .

'

'&

*

* *

B

+), =

= , / B/

;

* /

/ /

.

* * ' '

;

* / , ?

,

/ *

*

/

. .

*' ' &

C/C

*

;

, H

6 *

C/"/

' *

@/

'

3

7

+). F

*

*

,

*

*

;

*

,

/;

'

ICJ

C/C/

*

,

(/$/(/

3.9 Limitations &

. 7 &

* "

&

&

&

, ,

, &

&

* */ &

& &

*

/

,

, 7

/

* ,

&

* * & &

=* '

* *

&

,

* *

& F

*

*'

/

/

,

' ,

& & * . ,

&

+ #/B'

*

&

/

3.10 State of Implementation , .

8 9

6

*

,

, * 5 '

&

* &

C/B/

& ,

,

* *

ICJ , *

&

! 0

/

'

8

&

,

&

*

;

* *

*

/

/

& / 7

,

8

, &5

=

7

8

&

' &

8

,

,

/

8

*

/

*

/

/ *

,

*

.

'

; /

7

/

7

*

*

8

&

* *

, /

/ 8)

*

/ ,

8

/

* *

8

*

L

&5

*

8

8

/ .

:

/

,

& 7

* .

*

/

7

8

;

*

,

&

;

*

/

%9

*

/

*

&

/ ;

* /

8 A% 9

,

8

,

&

;

*

/

/ ;

8

&

* /

/

/ 9

*

8 ,

'

*

/ 9

0

8

'

,

,

7

9

* *

,

/

;

* /

, &

7

&5

/

&

8 3

&

* &

/

*

/

*

/

8

*

8

!

+)* =

8

*

&

ICJ

* * 5 /

* 5

*

* ' &

* ' E/B/

* /

/ 7*

*

/ /

4. Rigid Body Dynamics 4.1 Overview '

=

* ** **

H ,

= &5

' 6

*

8 , & &

/ , &

,

* *

8 9

,

=&

& =,

*

7' H ' H

,

6

' '

,

=& , 8 9

,

& +

7*

+ =& , ' * ** &5 , ** & ' * 5 /

6

'

* /

& &5 6

*

&5 , /

&

,

'

,

/

/ *

= * '

/

& ' *

&5 /;

/

I$CJ/

'

+

&

&

= ,

7*

&5 &5

&5 &5

6

'&

/ *

& 6 &

6 7*

5

* &

4.1.1 Definition of Rigid Body Dynamics =& &

&5

'

, * * * *

,

* -

' *

' *

? @

& ,

&5

* 5 ?

@/

. * * & )

,

7

=, * '

&5 6 &

*

I$CJ/ '

*

?

*

@/

=

* =,

, &5

=&

** 7

',

*

*

=

/

4.1.2 Additional Considerations for INTRAC 8 9

, *

& '

* *

& /; ' ' 7 / '

=, & ,

*

& &

* *

* * *

/

7

' * ' &

*

* = / 6

* > /

' *

,

= H, D/E G $' & 7

'

* ', ,

6

,

9

, * =& , , /

;

& ,

' '

' *

8 9 7&

6 /

*

'

&

7

& .

/

* &

,

*

&

& ,

'

*

7*

/

4.2 Dynamics Simulation Theory *

&

& .

=&

'

,

,

&

/

4.2.1 Basic Newtonian Motion ?)

&

9

I$ ' $(J@

=&

v=

'

dr =r dt

>

'

,

?,

*

+

a=

&

*

8 ,

, -

@

*

/

dv d 2t = v = 2 = r ?, dt dt

@

+

'

*

/ ;

'

& ,

-

v = a dt r = v dt ' / ' ,

* *

F = ma 8 , *

7* * &5 / ?,

6 @/ ;

&

' '

@

3

, * '*

=

&5

& &

&

I$ ' $(J@

/ &5

?, * 7/

4.2.2 The Centre-of-Mass ?)

+

=&

$)

+ C)

'

&5

&

'

= =

'

& ,

*

+

& ,-

&

**

mi ri

rCM =

i

?,

M

@

!

&5 ? 3@ &5

*

*

,

*

=

'

=

* /

6*

= =

& -

pT = MvCM

?,

@ +

*

'

&

= =

/;

&5 6

'

-

FT = MaCM ' &

= =

+

& . *

*

,

,

* /

4.2.3 Numerical Integration ?)

&

I$C' $(' $"J@ '

.

'

& &

* ? ? & /

*

*

& , @

, * @ ' = *

*

,

* '

*

.

*

'

*

?

*

@

& &

&

'&

/ *

F

"

&

F,

' ,

.

,

*

I$C'

-

dx dt

'

'


'

*

/ ' * *

? /

*

+

*

F *

' =

*

' , * '

' , @'

'

*

& /

/ 8 *

, ,

' ,

* $(J/

/ *

'

&

/

xn +1 = xn + h

**

'

' ** 7 * $"J'

' ', *

/

&

/;

* '

' * L

/ ** 7

I$C'

' *'

* 9 *

=

& ' &

=:

.

*

*

, &

*

/ ;

' '

'

,

/

7* I$C' $"J/

4.2.4 Angular Effects ?)

&

I$ ' $#J@

;

. &5

*

, & 7' &

'&

** & '

,

' * 7* *

. ;

7*

7

,

6' * ' 47 ?*

4' 5

7* &

F , **

' **

/

/

' @

/;

, *

' &

*

/ =

/

.,

-

d 2 Θ dω = =ω =α dt 2 dt 8

&

7

* ? * &

+

* ?

@

7

@

+

' 7 /

+ &

7

' & *

?

7 @'

* &

,

7 / ' '

*

*

6

C7C

+

+ ' 8/ ? @-

?(@ &

LAB = rAB × PB

τ AB = LAB = rAB × FB + ('

=* *

7

/

=* =& +

+

'

. +

,

+

/ = =

5

+ /

*

LAT = I Aω

τ AB = I Aα

( +

(/

% +

& , . , '

?,

&

*

@

6 , *

&5 '

+ &

*

'

+

'

/

*

',

&5

/

4.2.5 Inertia Tensor ?)

&

I$C' $EJ@

*

+

*

& , &5

&

,

*

'

&

,

/ *

7 /

$) '

&

+

-

IA =

mi rAi

2

i

*

&5 6 &

,

& *

* /

C) '

&

7 '

&

* ' &

* *

&

*

/ ;

=& '& *

' * , =.

2 MR 2 5 I CM =

& / ,

* ' '

0

0

0

2 MR 2 5

0

0

0

;

'

'

*

& &

i =1

2

7 &

2

m( y i + z i )

I CM =

B

i =1

+

0

2

2

m( xi + z i )

0

&

I$CJ-

0 p

0

*

, &

p

0 p

0

i =1

2

2

m( x i + y i )

4.2.6 Collision Detection ?)

B

&

. 7

I$DJ@

&

& = =

*

2 MR 2 5

' &5

& + I$C' $ J-

7'

& L= 7 '

' *

'" /

9

&

/ ,

'

* ' *

, * * &

&

*

/

/

'

* @ I$DJ/ * / 7 ' & * ? / * & . =* ' * / ,

'

&

?

* * *

& ,

/ *

'

*

' '

,

* +

'

' ' &5 6 +

&5 6 * *' & '

,

' *

7

P0 (t ) = C0 + tv0 '

P1 (t ) = C1 + tv1 , $& ,

/ &

/

,

'

, '

& &5

/

* * '

&

&5

*

. ,

&5

7

/

"/

* &

'

&5 *

*

&5 6

/

/;

* *

/

*

+

=

7*

*

&5 6 &

&

&5 / * 7

= I$DJ/

&

, 7=

' ,

'&

5

&5

' &

*

* *

* / *

* ' 7 /

7*

& &5

*

7

+

'

F

*

/

/

& 7 7

,

@'

*

&

;

*

7

*

'

& ,

**

*

'

7 =

/

7 &

*

&

** *

*

&

,

.&

, &

' *

' . .: , ' .1 & & -

* 1

:

0 ≤ t ≤ 1/ &

& -

d (t ) = (C0 − C1 ) + t (v0 − v1 ) + &

!

B

'

'

-

d (t ) ⋅ d (t ) = r0 + r1 .

s = C0 − C1 ' v = v0 − v1

r = r0 + r1 -

&

'

( s + tv ) ⋅ ( s + tv) = r 2 ( s ⋅ s − r 2 ) + 2(v ⋅ s )t + (v ⋅ v )t 2 = 0 t=

− v ⋅ s ± (v ⋅ s ) 2 − (v ⋅ v)( s ⋅ s − r 2 ) v⋅v L /

L

+

'

* /

*

?

/

, * , & ' &

&:;< & *

&1;< &5

/

+ '

, @

+ *

'

* '

' &

, & ,

L @

'

?

!

B'

/

&

*

&5 *

/

*

* 7' * 7

* 7'

/

'

= * &

'

7 ,

=&

/

4.2.7 Collision Response ?)

&

I$E=C!J@ *

,

'

&5

&

' ,

7

/

' , * *

* *

' IC!J/

' * / & ',

7

/

&5 * & + *

& &

* &5

&

6 5& + , &

',

&

=

** 7

&5 & ,

& * * ,

, *

* ,

.

'

/

'

'

& / '

,

,/ *

& 6 ' '

* B

/ /

* 7 *

/

'

* *

/3

'

,

'

*

,

&

/ *

B

* /

* ? $

&

,

! '

*

&

*

& , * @ &

* * '

*

, &5

'

& ,

&

$

&5 ' & .,

I$EJ-

7

*

/ & '

'M /

&5

'

*

,

' *

' / !('

'

(

6 (&

*

+

& MNB

MN! '

AB

v1

& ,

& * &

/

− (1 + ε )v1AB ⋅ n

j= n⋅n

[(

)

(

]

)

1 1 + + I A−1 (rAP × n ) × rAP + I B−1 (rBP × n ) × rBP ⋅ n MA MB

%

*

'

&

&

? &

*

? &

* $@

* B@-

j n MA

v2A = v1A +

ω2A = ω1A + I A−1 (rAP × jn ) j n MB

v2B = v1B −

ω2B = ω1B − I B−1 (rBP × jn ) ' .

' *

/ % ,

*

&

'

&

/

4.2.8 Conclusion '

=&

7

*

& * ' , /@

&5 6 7

* ' *

& '

' 5 7

& / * ,

?

&

/

*

&

'

'

* 7

=&

):'

/

4.3 INTRAC Implementation Details 4.3.1 Terminology H H* '

=& 6/ ,

H* 8 9

6 .

6

* =&

&

' *

* ' =&

' &

&

/

4.3.2 Open Dynamics Engine H*

6 7 . ?% ) @ ICBJ/ . & ' 8 9 & =& / ; 8 9 / %) * , $"

*

* *

' *

=

):'

&

="

= * ' '

* , & ' , =

=

* *

/

* *

%)

,=

&

F 7* =

/

*

* 7

,

+

$

, ,

/3

&5

@ &

,

&

?

*

& L @/

*

%)

?

*

*

&

*/

&5 / %)

* 7 * * & , + '

&

B

= * .

' & /0

& /

*

8 9 &

/ &

&

@

'

' & ' ' ,

&

* 7 %) &

, . ICBJ & /

?

'

4.3.3 PhysWorld 0

*

% 2 * ,

*

& *

* 0

F 0

'

*

/

&

, . * *

& *

&

/

7

, ,

,

* '

/

,

*

'

7

*

* ;

,

/

'

B

, , *

*

8 & * * *

%)

,)* F

*

7

*

,

*

0

/

& /B/ 3

0

/

GROUP[ NAME: Root CHILDREN[ PHYSWORLD[ NAME: PhysWorld1 GRAV: [ 0 0 -9.8 ] ERP: 0.2 FRICTION: 100 BOUNCE: 0.01 CHILDREN[ . . . ] ] GROUP[ NAME: Static_Scene . . . ] ] ] '

,

;

$

/$' ? 9 @' /

& '& ? , &

&

,)( F

7

*

0

0

/

* *

' &

9

& %) *

@/

& ,

!/B

B/!

5 @ ' !/$'

?

*

'&

/ &

&

& 5 &

* & &

',

*

;

',

&

** / ** * / & (!/ ;

=, * 5 & , ! 6' & ,

H&

*

!

'

B

!/B/

4.3.4 Physics Nodes 8 *

7

'

; * & *

, &5 *

' ' &

, '

* '&

* *

* 7& '

,

/ *

,

* ' & 7

' / * *

,

&

& /

&

/

/

* H

*

& 6 &5

& 8

7* /

*

/ '

8 %) /

'

* &

8

,

,

* , *

*

& '

* *

= ' '

/ /

, '

/

.

*

'

3 8 &

+ ' 7 & , /0 ?, *

% 2

F

F

*

*

,

& &

@ *

*

*

*

* * *

/ 8

*

'

*

8

& ,

/ & ,

0 = *

' ' ,

8 & /

&

*

* %*

4.3.4.1

' =

&

8

&

** *

&

& *

&

0 '

,+ *

8 2 * 8

*

&

*

&

/ 8

'

/

PhysPlane *

+ '

. * /C' + +

;

* * ' * '

/

;

,

* ,

+ -

&

Ax + By + Cz + D = 0

PHYSPLANE[ NAME: Ground PLANE: [ 0.0 0.0 1.0 0.0 ]

]

CHILDREN[ FILE[ /common/models/floor.osg Floor1 ] ]

'

PLANE: * &5 / 8 2 * '

,)+ F

*

7

, *

*

*

;

' (' 2 * L= 7 N !' N !'

&

+

/

& . NB

*

, 6 *=

& H ) N!

*

* %* /

/

*

,

,

+

*

* * B/

' &

PhysSphere

*

* *

&

*

*

*

' /;

=

7= * % 2=

+

&

B

H *6/ 3

&

=

' *

4.3.4.2

/

/

',

*

L= 7

*

'

* '

*

* & /

;

*

' ;

7

&

,

/ /

PHYSSPHERE[ MASS: 1 NAME: Sphere1 RADIUS: 1 POS: [ 0.0 2.0 3.0 ] VELOCITY: [ 0.0 0.0 0.0 ] SPIN: [ 0.0 0.0 0.0 ] GRAV: T IMMOVABLE: F CHILDREN[ DRAWSPHERE[ TEXTURE: /textures/Green.png ] ] ] '

, *

/ ,

;

*

= 7*

* *

7 @' , *

*

&=

)

&

'

' * ,

, *

',

&

9 )

,), F

-

' & / *

& / * ,

&

*

) ' ,

* ,

'

&5 ' & , ' , *

*

, ,

,

B' , /

& *

*

*

/

PhysBox 7

*

6 ' B

& *

, ** *

/

*

/;

'

4.3.4.3

*

'*

& *

/

*

= , 7 ' 7 / , ' &5

*

*

?

8 , * * * * *

/

7* IB'B'BJ/

* &5 /

* 7

*

;

F

*

7

* ;

/(/

',

PHYSBOX[ MASS: 5 NAME: Box1 SIZE: [ 1.0 0.5 0.5 ] POS: [ 0.0 0.0 5.0 ] ROTATION: [ 0.0 0.0 0.0 ] VELOCITY: [ 0.0 0.0 0.0 ] SPIN: [ 0.0 0.0 0.0 ] GRAV: T IMMOVABLE: F CHILDREN [ DRAWBOX [ TEXTURE: /textures/Green.png ] ] ] '

7'

. &

'

'&

'

,)- F

* / ,

& 7/

& ** / & *

*

7 &

'

7

=

B

7

*

&5 *

)

,

'

, &

** 7 *

& * , *'

' & *

* & /) *

& &

/

PhysMesh 3

.

7 /

,

* '

7

'

*

& **

'

= =

7' = & 7 7' . ) , * ' ' * * ' 7 & 7 6 '

&5 /;

7*

' * '

. & ) ,

7,

/

4.3.4.4

' L ' ,

/

&

7

/

,

7/ , & /

7

.

=

&

7

;

' * , )

*

*

'

*

*

7

&

*

*

, ',

*

,

* *

'

* ,

8

&

8

3

& ,

8

/

/

PHYSMESH[ MASS: 5 NAME: Mesh1 POS: [ 0.0 0.0 5.0 ] ROTATION: [ 0.0 0.0 0.0 ] VELOCITY: [ 0.0 0.0 0.0 ] SPIN: [ 0.0 0.0 0.0 ] GRAV: T IMMOVABLE: F CHILDREN [ . . . ] ]

'

8

'

,). F

3

& /;

& * ,

7

*

* '

, ' , ,

,

/

"

& 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 << ;

. &

(/C/

B The syntax extern "C" __declspec(dllexport) permits a function name in an external library to be visible to the INTRAC software at run-time.

/

EXTERNALT[ FILE: ButtonBoxInterface BBOXT[ BUTTON: 1 ] NAME: ButtonBoxTrigger1 BTRIGGER[ OBSERVERS[ BBoxT1 T ResetSphere T ] BINTRAC[ RESET: T START: T GROUP[ NAME: BBoxT1 ] ] ] CHILDREN[ ... ] ] '

-)+ F

7

*

ButtonBoxTrigger/

;

* 8 & ' 8 9 F ' 9 / HEXTERNALT[6' HEXTERNALR[6 HEXTERNALC[6' * & ' * = * 7 0 , ' H 7 / 6, & ** , ' & * / ;

,

'

7

; 7 ParseTrigger ** * &5 ,

* HBTRIGGER[6 & ?HBBOXT[H * *

& /

& /

H/

H/ 6/

F ,

& * &5 /

, = * ' & /

7

* @' =

6

/

*

* & , / '

/

** * &

*

* . 7 '

;

' '

7

*

*

F

& 8

'

= '

' *

, , &

/ *

/

5.1.4 Button Box Example , 9 = $! 7* * * /; * 6

* ,

*

& , IC$J * ' *

7 *

* * *

& .

' 7* *

0 / '

, (/ /

, *

/

+ *

/

.

,

*

* *

/

;

7 7 IC$J , * 5 ' *

ButtonBoxTrigger/

'

,

&

&

*

#include #include class ButtonBoxTrigger : public intrac::BaseTrigger { public: ButtonBoxTrigger(); ~ButtonBoxTrigger(); virtual void update( osg::NodeVisitor& nv ); static osg::ref_ptr triggers[4]; private: static int m_instanceCount; static void* hPort; }; '

-), F

7

&

' & /0 .

' &5

& & ButtonBoxTrigger

;

ButtonBoxTrigger

' &5 (/(' * ' '

/ , &5 & / /

;

(/D/

,* parseTrigger ** * & 7 update update

&

',

#include "ButtonBoxTrigger.h" extern "C" __declspec(dllexport) intrac::BaseTrigger* ParseTrigger( vector::iterator& iter, vector::iterator& EOF ) { int num = 0; if (iter == EOF) { cerr << "Unexpected end-of-file encountered!" << endl; return 0; } if (*iter != "BUTTONBOXT[") { cerr << "Unknown Token :" << *iter << ", expected 'BUTTONBOXT['" << endl; return 0; } iter++; //expecting BUTTON: if (iter == EOF) { cerr << "Unexpected end-of-file encountered!" << endl; return 0; } if (*iter != "BUTTON:") { cerr << "Unknown Token :" << *iter << ", expected 'BUTTON:'" << endl; return 0; } iter++; //expecting a number 1-4 if (iter == EOF) { cerr << "Unexpected end-of-file encountered!" << endl; return 0; } num = atoi(iter->c_str()); if (num < 1 || num > 4) { cerr << "Unknown Button number :" << *iter << ", expected 1-4" << endl; return 0; } while (iter != EOF && *iter != "]") iter++; //skip through the end if (iter == EOF) { cerr << "Unexpected end-of-file encountered!" << endl; return 0; } if (*iter != "]") { cerr << "Unknown Token :" << *iter << ", expected ']'" << endl; return 0; } iter++; //jump past the last "]"

}

if (ButtonBoxTrigger::triggers[num-1].valid()) ButtonBoxTrigger::triggers[num-1] = new ButtonBoxTrigger(); return ButtonBoxTrigger::triggers[num-1].get();

'

-)- F

7*

6 ParseTrigger

/

void ButtonBoxTrigger::update( osg::NodeVisitor& nv ) { BaseIntrac::update( nv ); int response = CedrusGetButtonResponse(hPort,1); if (response) { if (triggers[response-1].valid()) { cout << "Button Press Detected: " << response << endl; regForIntrac( new intrac::ActivationLink( triggers[response-1].get() ), true ); } } } '

,

ButtonBoxTrigger--update

-). F

&

, 4

*

;

7*

;

(/C/

/)/

5.1.5 Limitations , *

7&

6

* ; ,

9

6 '

. ; 9

/ =* '

& * 7 * /

, 7 * ;

F

'

* '

,

.

,

. * , &

= =

/

,' ,

;

/

* ;

9

'

*

'

7*

/

* & &

'

7 '

, ,

* ' 7

,

' '

*

'

/

*

6

*

&

&

*

*

.

,

#/$/

5.2 NOT Conditional Node 8% 7

& * ;

/ ; (/#/

'

8 9

& '

NOTC[ BCONDITION[ BTRIGGER[ OBSERVERS[ ObserverName T/F . . . ] BINTRAC[ RESET: T/F GROUP[ NAME: Name T/F ] ] ] ] ]

'

& '

* ,

;

* (/E/

-)0 F

8%

* * ' 8%

$

8

' &

' '

8% *

&

%9

/ '

)

! -

&

, ;

&

-

-)1 F

/

$

' % 2

'

*

" ,

)

!

;

! (

8%

,

* (/D/

-

*

*

, /

*

8)

$

)

!

-

! $ . ' $

%

) '

-)2 F

%

' '

7

,

*

8%

(

8

/

'

&

' ,

& '

8%

,

;

(/B!/

$

)

! ,! $ . ' $

%

) '

-)*3F

+

7

* '

' *

' '

8%

/

* *

,

&

** /

*

8%

B

/

B

'

,

A% 9

*

, 8%

'

(

& &

' & , / '

* 8%

&

' 8

&

8)

* ,

/

&

8% &

. /

'

/

'

8

/

'

8% "

/

/

&

*

'

7

+

/ '

8%

&

*

8%

&

&

&

* &

,

'

&

* / *

&

/

5.3 Jittered Inputs * , , 7/ . 7 * '

;

=

'

* * 7 '& & 7 ',

',

*

' *

& &

5 & * *

,

*

; ,

/ parseFloat H±6

*

'

H& *

<& /

& , . =&6/

+

*

, *

*

8

,

5 & *

' * + *

/; ,

,

*

&5 6 ,

6'

/ & * &

; & HIDEAL±VARIATION’ 7 / . .

* &

*

, $

*

&

&

/

@

', & , H O&6'

&

* & ' , ' & 7= & 5 7 ' / * &5 *

' .

& ' & ,

L=*

/ '* &

'

&

,

* /

L= ./ ' '

7

*

6'

&5 &5

'

'

'

'

.

6 7* * /; '

+ '

9

/ 5

** 8

3 5

'

&

,

' *

& , &

/ &

.

&5 /

H

/ /

/

&

HIDEAL±VARIATION’ $ ? & ' * , '

** 5

/ & '

.

&

& *

/

H* 6 7 =* & 7, , & . 6 * H 7*

'

& ' 7/

,

* ' , 5 / . ' ; 9

5

7

*

&

,

&5 , '& 7 * & ' * ' . , '& +

* '

& 7 & 7 *

'

, 7 '

,

7

&

.

/;

, F,

/ *

&

7

6

/ $'

',

,

/

5.4 Physical Effects of a Moving Viewpoint 5.4.1 Manipulators %*

! .& ;

3 3 /

2 *

&

/ ', ' ,

* *

8 9 *

& &

3

.

*

*

'

, ', & * *

& / '

,

,*

6

,

* '

6

6

5 /

, ',

, * H

&5

*

*

& / ;

7 '

,

, ,*

, % 2'

,

**

,

/

5.4.2 Motivation 3

*

* &5 * * .'

, , ,*

6

, 8 9

&

F

& *

,

,

'

'

/

, '

& = ,

,

&

'

+

* 7

/

5.4.3 Implementation Strategies &

, &5 ,

,* & , &

&5

& /

& ,*

&

'

7*

&

&

* **

H

** & 6

* * *

,

,

/ ;

' /

' ,

&

& *

7

,

F

,

/ /

' ,

*

/

,* . & & 0

* *' , 6 & ' ,

&5 / , &

& , & '

, ** ,*

** $

'

&

,

,

,* , & / & & , &5

/

B

&

&5 ' ,*

,* &

* B &

&

*

$

&

/

+

,

* ' ,

,

& *

&5

,

'

,*

& *

. * 0

*

/

=

/ *

, 3

* &5 /

,

/

&

'

& ,*

** "

' /

,*

& ,*

'

&

,

&

&

&5 / &

, *

&5 '

@

6

, ,

* *

* 6 *

, & ,* ,*

,*

, 6

& ,*

'

&5 / ' , ** ' ,*

, ?

/

*

0

*

,*

*

* /

. *

&

&

**

/

'& *

/

5.4.4 Implementation Details **

'

7&

&

& ,*

/

' , 6 ,

' &5 / *

&

3

*

' &5 / 0 / *

,*

&

* *

'

& ,

*

/ 6 **

L

'

&

'

' ,*

*

** * 6

',

/ * &

,* *

' &

*

'

/0 *

,*

6 ,*

.

B

, ,

, 7*

& ,

,

* /

&5

& / &5 &5 **

+ &

+

'

H , *6'

* , ,

/

/ '& B

'

6. Evaluation ,

8 9

, * &

, '

&

=

, ,

' /

&

&

.

,

&

,

/ &

8 9

+ ** *

*

ICJ' * *

,

, ,

/

6.1 Test Scenes 6.1.1 Scene Features 6.1.1.1

A Room Using Planes . * F

*

F

*

, ' , 7 ,

) &

*

*

3 '

,

' *

6.1.1.2

&5 &5 ,

,

*

/ , * ' / *

*

/ 7

6 &5 *

*

, *

&

/

&

F

&

/

Separate Physical Worlds

*

0

& '

7

,

0 *

' *

*

H '

* &

*

&5

/

,

,

/

7* ,

, , &

*

=

*

, & F

/

'

,

' &5

& 0

, 6 &5

H 0

6, /

*

6,

* / % &5

H

*

* ,

' 6 ,

' /

'

H

6

/ 6.1.1.3

,

Ghostly Spheres

',

=

*

, , ' ) , * ' ; "/$/

7 ,

,

;

"/B/

&5 ** , 7 ,

' * /

,

H !/!B'

, / , & , *

'

!/C *

*

6

,

PHYSSPHERE[ MASS: 5 NAME: Ghost1 RADIUS: 0.01 POS: [ 1.5±2 0±3.5 0±3.5 ] VELOCITY: [ 0±3 0±3 0±3 ] CHILDREN[ MAT[ SCL: [ 30.0 30.0 30.0 ] GROUP[ NAME: LeftBox CHILDREN[ DRAWSPHERE[ TEXTURE: /textures/Black.png ] ] ] ] ] ] '

'

* &

& *

*

.)( F

5

,

H2

H

6 *

6 *

6

*

*

,

/

' F ,

, & /

.)* F

' '

' 7*

.

, *

6.1.1.4

External Trigger '

' ,

(/C'

*

7 &

; 6.1.1.5

;

7

,

/

/

+

&

/

, /

& '

H

6.1.1.6

& ,

'

9 '

6

&

&5

,

* /

,

Physics Triggers . &

H

7

Physics Reactions

9

&5

(/B/

F 7

/ *

6F

6.1.1.7

/ & 7 ,

*

'

9 & 7

', /

& 7 & ' &

Friction ,

,

&

**

/ * '

,

'

*

,

/

6.1.2 Resulting Heuristics *

'

/ • ,

* ' & / % &5

*

*

*

*

&

' •



)

7 C) , ' ) & ' *

&

* *

,

* ** 7

7 ** &

0

*

' , * *

,

'

&

&

/

,

3

& *

/ '

/ /

&

' **

&

= /

,

*

0

&



*

0

9

7 8 &

&

&

'

/

** 8

&

/

L '

/

* * •

&

&5 &

& & •

'

/

6 & &

'

&

/

/

,

/ ',

'

8

;

/D/

*

& '



*

/

7

H&

6

*

0

&

=,

'

*

5 &

&

/

&

/

&

&

/

6.2 Results * *

+

,

/

'

7

9

/

* &

'

,

*

'

7 &

',

' * /

6.2.1 Mesh Collisions 3

&5

*

&

/

&

& ; &

&

' /

* &

7 *

*

* ' / , *

3 '* , &5 ?

% 2

, %)

*

* '

, &

* '

' ,

, &5 * & *

/

'

&

,

,

7 /

**

@'

* & * & 6

**

& ,

' / &

/

"

%) 6 *

* '

'

*

/

6.2.2 CPU Usage in Scenes with Multiple Contact Points * & = &5

,

&

*

& ,

7 /0 &

,

& , C! *

, G

' /

G

& 7

,

'

*

,

/% &

&5 *

& . ' & 7 '

&

& *

/

' %)

*

, &

* * &5 C!!

* & '

, /

8 9 *

& /; * 5 /

* * &

'

7. Future Ideas 7.1 Message Nodes 7.1.1 Scripting 8 9

'

*

ICJ'

*

* &

* ; &

/

' * * *

,

*

'

0)* F

7

, '

* & &

,

*

'

=

*

'

&

/ ,

; *

'

& & *

' '

& &

&

&

' * , /

, ,

* &

,/

*

,

, =

* *

* /

,

* & & * * &

'*

/

*

#/B/

**

, *

* '

/; . .

*'

* =&

' =

7/ &

& * & * ' / , /

,

* & * ,

* ' .

& ;

* )

* '

,

= 8 9 /8 ,

'

*

*

& ' 7&

,

8 9 & *

*

G /

. F

'

,

; &

&

/ ;

'

* &

* 7 * $'

/

*

> * =&

;

/ *

/

/ 8 9 7/

, * ,

, **

, ;

& *

8 9 7*

$ & &

' * &

*

* '&

*

! * &

&

$

*

,

/

7.1.2 Instruction Objects , * *

&

**

;

&5 & , #/$/

* 7' *

* 9

/

9 * /

**

F << 6 * ,

7 '

class BaseInstruction { public: virtual void execute(BasePhysics*) = 0; }; template class UnaryInstruction : public BaseInstruction { typedef R (T::*MemFuncPtr)(A); public: UnaryInstruction( MemFuncPtr f, A a ) : _f(f), _a(a) { } ~UnaryInstruction() {} virtual void execute(BasePhysics* node) { if (node) (static_cast(node)->*_f)(_a); } MemFuncPtr _f; A _a; }; '

/ * ** *

0)( F

<<

7

&5

' BaseInstruction' . * * BaseInstructions' &

& ' ,

& & =

execute UnaryInstructions@

',

?

UnaryInstruction , * BasePhysics / typedef & T' , * & * R/ & MemFuncPtr 7 * ' PhysSphere & 7 ;

9 +

9

6 ' /

& MemFuncPtr & & #/C/

& * * A * , 7 setRadius' ,

/;

intrac::UnaryInstruction< intrac::PhysSphere,void,float >( intrac::PhysSphere::setRadius, someFloatValue ) '

0)+ F

<<

', setRadius

7

UnaryInstruction

execute

, PhysSphere' *

PhysSphere::setRadius/

PhysSphere* * someFloatValue/

',

UnaryInstruction & ' * & * ' / . UnaryInstruction * BasePhysics' .

8 &5 ' &

* '

& *

"

"

9

* * & * ,

/

8 ' 9 BinaryInstruction , L , * BasePhysics * * &

6 '

*

* ,

' ?7 * , @/ * &

execute , & &

; ' & BasePhysics*' osg::Node/ 8 " * *

ZeroInstruction , &

* '

&

osg::NodeP * * '2

* * =2

/ ' , osg::Node *

9

/

' '

& ;

*

* /

7.1.3 A Generic Message Node , *

& !

&

'

* *

;

.

9

% 2 8 /

,

$/

0), F

7

3

,

8

;

+

;

#/B/

#/(/

MESSAGE[ TARGETTYPE[ TARGET: TARGETNAME VARIABLENAME: VALUE . . . ] ] '

0)- F

;

*

3

8

/

' ,

"

7 (

' ! A

*

'

9

*

/

'

& 8

3

;

/ ** *

*

/

7.1.4 Benefits of Message Nodes ,

**

*

3 ; 3

'3

;

8 8 ,

7 7 =* = 7 =

8

** * &

6 ;

3

' 8

,

&

7' ; *

&

'

* /

* ;

*

* 8

3 ',

7* ,

*

/

' *

& '3 *

*

/

&

* ' ,

'

/

,

,

/ /

8

& * '3

& 8 9 *

8

/

* ' /

7.1.5 Usage Examples 7

*

,

*

&

/

'

7

3 *

0). F

*

8

7

8 ;

#/"/

*

'

3

&

8

/

'

.

* /

*

'

0)0 F

7

*

,

3

8

*

/

& 7

& ; '

'

/BB'

/ 3

8

,

0)1 F

osg::Node' , ; #/#/

*

&

& '

&

,

;

#/E/

& 3

8

7.2 Code Improvements & * 5 ' , ' , & *

* /

7

&

* *

7 ,

,* /

* , = + '

, /;

* ' &

&

=

*

7.2.1 A Serialiser Pattern for Parsing FLCL '

9 0 ** * 7 =*

&5 . *

; *

&5 * *

;

'

&

** * *

* /0

:

;

, 9 #/D/

0

' *

;

/;

'

void ReaderWriterFLCL::parseKeyT( intrac::KeyTrigger* node ) const { incPos(); while ( read() != "]" && notEOF() ) { if ( read() == "BTRIGGER[" ) { parseBaseTrigger( node ); } else if ( read() == "KEY:" ) { incPos(); node->setKey( read()[0] ); incPos(); } else if ( read() == "DESC:" ) { incPos(); node->setDescription( parseString() ); } else if ( read() == "EXCLSV:" ) { incPos(); node->setExclusiveKey( parseBool() ); incPos(); } else if ( read() == "DOWN:" ) { incPos(); if ( parseBool() ) node->setKeyStatusType( intrac::KEY_DOWN ); else node->setKeyStatusType( intrac::KEY_UP ); incPos(); } else incPos(); // ignore unexpected strings } if ( notEOF() ) incPos(); else printMessage( "Unexpected end of file!" ); return; } '

7* 9

& '

0)2 F

;

*

;

/ 3

* #/B!/

G 0

:

& ' ,

;

&

& parseChildren

void ReaderWriterFLCL::parseChildren( osg::Group* current ) const { incPos(); while ( true ) { std::string token = read(); if (...) { } else if (...) { . . . } else if ( token == "KEYT[" ) { intrac::KeyTrigger* keyNode = new intrac::KeyTrigger(); parseKeyT( keyNode ); connectChildNode( current, keyNode ); } else if (...) { . . . } } return; } '

8

' & ,

* / * *

, 8 9 '

*

,

' ** * *

&

parseKeyT/

'

;

& . ,

parseChildren &5 '

6

/ *

,

parseChildren

0)*3F

-

ICCJ *

,

,

/

&

,

'

K G,

/

7

*

read

* ;

#/BB/

&

void KeyTrigger::read(Serialiser& s) { s.incPos(); while ( s.read() != "]" && notEOF() ) { if ( s.read() == "BTRIGGER[" ) { BaseTrigger::read( s ); } else if ( s.read() == "KEY:" ) { s.incPos(); setKey( s.read()[0] ); s.incPos(); } else if ( s.read() == "DESC:" ) { s.incPos(); setDescription( s.parseString() ); } else if ( s.read() == "EXCLSV:" ) { s.incPos(); setExclusiveKey( s.parseBool() ); s.incPos(); } else if ( s.read() == "DOWN:" ) { s.incPos(); if ( s.parseBool() ) setKeyStatusType( KEY_DOWN ); else setKeyStatusType( KEY_UP ); s.incPos(); } else s.incPos(); // ignore unexpected strings } if ( s.notEOF() ) s.incPos(); else s.reportError( "Unexpected end of file!" ); return ; } '

KeyTrigger::read

0)** F

;

*

* /

* , & +

;

', *

' /

&

; *

;

9

, * ,

/

* ' =*

'

,

9 & ' , **

* * 6 read . ' .

, /

& * &

* ' /

'

*

*

/ *

&

* * & &

'

6 . F

/ '

,

/;

'

&5

& *

&

'

&5 '

& * ' , '

&

&

* ;

/

/

* , ' 7 6 ' parseTriggerGReactionGConditional / . & * ** * parseNode ; 9 &5 / ' & ,

*

' = *

,

& *

*

+

*

+

, 8 9

'

+

/

, .

/ '

7.2.2 Utilising Abstract Factories *

*

'

&

7 =* ,

read / parseChildren ', * ' * ** * * ' parseChildren , * 8 9 + , ; , ,

& * . ' *

* *

'

IC J' '

*

. 9 .

+ * << parseChildren , ' / ' ,

/ ;

* 7 * , '

* '

,

/ HKEYT[H

:

'

/

. .

6

'

*

, 8 9

*

,

*

/ * m_registry ; &5 BaseFactory* /

/

* ; * read ** *

* '

/ ,

9

& /

6 6

9 ,

parseChildren/

. ;

, ;

C!< * parse , &

&

'

' ,

' '

&

&

&

*

*

* ' ;

; #/B$' ,

,

.

#/BC/ 8 '

* * '

class BaseFactory { public: virtual void read (Serialiser& s) = 0; static map< string, BaseFactory* > m_registry; }; template class DerivedFactory : public BaseFactory { DerivedFactory() { m_registry.insert( map< string, BaseFactory* >::value_type(T::m_token, this) ); } public: virtual void read (Serialiser& s) { T* tptr = new T; tptr->read(s); } }; '

0)*( F

* *

<<

;

/

void ReaderWriterFLCL::parseChildren( osg::Group* current ) const { incPos(); while ( true ) { std::string token = read(); if (...) { //Non-node tokens } else if (...) { //Non-node tokens . . . } else { //All other tokens handled here intrac::BaseFactory* fac = intrac::BaseFactory::m_registry[token]; if (fac) fac->read(*this); else printMessage("Error. Token '" + token + "' not found!."); } incPos(); if ( ! notEOF() ) { printMessage( "Unexpected end of file!" ); break; } else if ( read() == "]" ) { incPos(); break; } } } '

parseChildren

0)*+ F

* * 6 . * 6

+

& & *

'

** * & ;

* *

;

; 7 #/B

*

* ' / ;

#/B(

class PhysSphere { . . . public: static const string m_token; private: static const DerivedFactory m_factory; }; '

0)*, F

PhysSphere

+

/

const string PhysSphere::m_token = "PHYSSPHERE["; '

% *

0)*- F

*

7

; , &5 /

PhysSphere

+

' &5 / ** * * '

, & read *

* *

/

,

. &5

; &5

,

7.2.3 Implications for a Message Node Implementation ; & *

#/C' & ,

<< ;

UnaryInstruction , / * & /

7 7 *

, '

*

'

;

,

'

&

9

*

* &

'

/ ;

9

&

G 8

parsePhysicsR

,

;

/

#/B"/

void ReaderWriterFLCL::parsePhysicsR( intrac::PhysReaction* node) const { typedef std::pair PhysRPair; incPos(); while ( read() != "]" && notEOF() ) { if ( read() == "BREACTION[" ) { parseBaseReaction( node ); } else if ( read() == "SPHERE[" ) { incPos(); while ( read() != "]" && notEOF() ) { if ( read() == "POS:" ) { incPos(); node->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/

=

Enabling User-Interaction in Virtual Environments for ...

26 Oct 2005 - In partial fulfilm ent of the requirem ents of the degree of Bachelor of Inform ation Technology with H onours, I subm ... the user in a realistic m anner with m inim al effort on the part of designer. It is also ...... 3D artistic work is not uncom m on however, and, as utilising the com puter for graphic design has the ...

1MB Sizes 2 Downloads 239 Views

Recommend Documents

Virtual environments for education
Article No. jnca.1999.0089, available online at http://www.idealibrary.com on. Virtual environments for ... in order to leverage the role-based elements of the game. The students make their ... (3) a text-based MOO server. Students use a ...

Evaluating Cultural Learning in Virtual Environments
the requirements for the degree of Doctor of Philosophy. January 2006 ...... Hospitals have adopted VR techniques for pain management. (Lockridge, 1999), and ...

pdf-1399\virtual-learning-environments-concepts-methodologies ...
... apps below to open or edit this item. pdf-1399\virtual-learning-environments-concepts-meth ... usa-information-resources-management-association.pdf.

Introduction to Virtual Environments - Semantic Scholar
implies a real-time speech recognition and natural language processing. Speech synthesis facilities are of clear utility in a VR environment especially for.

PDF Handbook of Virtual Environments
Environments: Design, Implementation, and Applications presents systematic and extensive coverage of the primary areas of research and development within ...

Distance Estimation in Virtual Environments ... - ACM Digital Library
Jul 29, 2006 - and a target avatar in the virtual world by using a joystick to adjust ... ∗email: {jingjing.meng,john.j.rieser.2,bobby.bodenheimer}@vanderbilt.

Collaborative Virtual Environments and Multimedia ...
Communication, Mobility, Network Security, Quality of Service, Healthcare. Introduction .... These actions can be shared and transmitted through the Internet to ... sensibility of the data with personal information (e.g. address, phone number etc.) .

Introduction to Virtual Environments - Semantic Scholar
Virtual Reality (VR) refers to a technology which is capable of shifting a ... DC magnetic tracker with the best wireless technology to give real-time untethered.

Exploring Large Virtual Environments by ... - MIT Press Journals
Brain–computer interfaces (BCI) are interaction devices that enable users to send ... and to navigate within large virtual environments (VE) by using only a BCI ...

Enhanced Virtual E-Learning Environments Using ...
by Google Apps intended to be software as a service suite dedicated to information sharing and security. Google Apps covers the following three main areas: ...

Virtual Execution Environments: Support and Tools
They are duplicated many times in the code cache and are often not used after the .... dynamic optimizations on code statements and data values from the user.

Exploring Large Virtual Environments by Thoughts ...
that VEs offer more possibilities than real-life condi- tions. .... BCI, the user cannot send commands at all times, which ..... 2009) to render the VE and to display the visual feed- back. ... then” rules from data, and use them to classify unseen

Side Effects of Virtual Environments - A Review of Literature.pdf ...
Side Effects of Virtual Environments - A Review of Literature.pdf. Side Effects of Virtual Environments - A Review of Literature.pdf. Open. Extract. Open with.

Storytelling in Virtual Reality for Training - CiteSeerX
With Ridsdale[10], actors of a virtual theatre are managed ... So, the same code can run on a laptop computer or in a full immersive room, that's exactly the same ...

Motion Planning For Steerable Needles in 3D Environments with ...
Obstacles Using Rapidly-Exploring Random Trees and Backchaining. Jijie Xu1, Vincent Duindam2, Ron ... quickly build a tree to search the configuration space using a new exploring strategy, which generates new states ..... are run on a laptop with Int

A Clustering Algorithm for Radiosity in Complex Environments
Program of Computer Graphics. Cornell University. Abstract .... much of the analysis extends to general reflectance functions. To compute the exact radiance ...

Enabling Data Storage Security in Cloud Computing for ... - wseas.us
important aspect of quality of service, Cloud. Computing inevitably poses ... also proposed distributed protocols [8]-[10] for ensuring storage .... Best practices for managing trust in private clouds ... information they're hosting on behalf of thei

Enabling Data Storage Security in Cloud Computing for ... - wseas.us
Cloud computing provides unlimited infrastructure to store and ... service, paying instead for what they use. ... Due to this redundancy the data can be easily modified by unauthorized users which .... for application purposes, the user interacts.

Incentives for Quality in Friendly and Hostile Informational Environments
Feb 24, 2012 - In contrast, friendly environments create free riding among sellers, which ... tion is another illustration: prestigious journals (mostly) include good ...... Learning and Statistical Discrimination, American Economic Review (Papers.

Incentives for Quality in Friendly and Hostile Informational Environments
Feb 24, 2012 - Email: [email protected] .... ity with a probability g if quality is high (”good news”) and probability b if quality is low ..... revision obtains from the fact that the fraction of self-regulating firms is F(c∗),

Tools for User Interaction in Immersive Environments
ing technologies for safe, collaborative, online environments that can en- ... The first REVERIE use case is an educational scenario involving teachers and.