ÿþU s i n g d e s i g n p a t t e r n s i n g a m e e n g i n e s
B y
R a s m u s C h r i s t i a n K a a e
k a a e @ d a i m i . a u . d k
S t u d e n t o f c o m p u t e r s c i e n c e a n d p r o g r a m m e r a t T i e t o E n a t o r C o n s u l t i n g A / S
A u g u s t 2 0 0 1
A l l r i g h t s r e s e r v e d
U S I N G D E S I G N P A T T E R N S I N G A M E E N G I N E S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1 . 0 I N T R O D U C T I O N . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 . 0 M O D E L - V I E W - C O N T R O L F O R T H E E N G I N E C O R E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 . 1 M o d e l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 . 2 V i e w . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 . 3 C o n t r o l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 . 4 E x a m p l e c o d e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 . 4 . 1 C o m m e n t s o n t h e c o d e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 . 5 A g r a p h i c a l r e p r e s e n t a t i o n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3 . 0 L A Y E R P A T T E R N F O R A 3 D - E N G I N E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3 . 1 T o p l a y e r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3 . 2 S e c o n d l a y e r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3 . 3 T h i r d a n d l o w e r l a y e r s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3 . 4 E x a m p l e c o d e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3 . 5 A g r a p h i c a l r e p r e s e n t a t i o n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1
4 . 0 C L O S I N G . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2
1 . 0 I n t r o d u c t i o n
D e s i g n p a t t e r n s a r e w e l l k n o w n p a t t e r n s t h a t m a y h e l p t h e p r o g r a m m e r i n t h e i n i t i a l p h a s e o f a
p r o g r a m m i n g p r o j e c t . T h e y c a n b e u s e d a s a g u i d e l i n e o n h o w t o f r a g m e n t a n d d i v i d e t h e f u n c t i o n s
o f a p r o g r a m i n t o s m a l l e r f r a g m e n t s . I n t h i s a r t i c l e I w i l l d i s c u s s m y p o i n t o f v i e w o n h o w t o
s t r u c t u r e a g a m e e n g i n e , u s i n g a v a i l a b l e d e s i g n p a t t e r n s . M y k n o w l e d g e m a i n l y c o m e s f r o m
p e r s o n a l e x p e r i e n c e s a n d f r o m m y s t u d y a t t h e c o m p u t e r s c i e n c e d e p a r t m e n t o f A a r h u s U n i v e r s i t y .
T h e r e a r e m a n y d i f f e r e n t d e s i g n p a t t e r n s a n d t h e y a l l h a v e d i f f e r e n t p u r p o s e s a n d u s e a b i l i t y , I h a v e
c h o o s e n t o c e n t e r t h e g a m e e n g i n e a r o u n d a m o d e l - v i e w - c o n t r o l s t r u c t u r e w i t h a n u n d e r l y i n g l a y e r -
s t r u c t u r e . T h e l a y e r s t r u c t u r e i s u s e d i n t h e 3 D - e n g i n e c o r e .
I t i s a d v i s e a b l e t h a t y o u a r e f a m i l i a r w i t h p o l y m o r p h i s m i n C + + .
2 . 0 M o d e l - v i e w - c o n t r o l f o r t h e e n g i n e c o r e
T h e c o r e o f t h e e n g i n e s h o u l d b e a b l e t o h a n d l e a l l t a s k s t h a t a r e i n v o l v e d i n a g a m e . T h i s m e a n s
h a n d l i n g i n p u t f r o m t h e u s e r , h a n d l i n g p o s s i b l e i n p u t f r o m o t h e r u s e r s ( n e t w o r k g a m e s ) , h a n d l i n g
t h e g a m e e v e n t s a n d o f c o u r s e h a n d l i n g t h e a u d i o a n d v i s u a l o u t p u t . F o r t h i s I w i l l u s e a d e r i v a t e o f
t h e m o d e l - v i e w - c o n t r o l d e s i g n p a t t e r n . T h i s p a t t e r n d i v i d e s t h e e n g i n e i n t o t h r e e v i t a l p a r t s .
M o d e l - v i e w - c o n t r o l i s p a r t i c u l a r u s e f u l f o r G U I - p r o g r a m s s i n c e i t p r o v i d e s a c e r t a i n d e g r e e o f
m o d u l a r i t y w h i c h m a k e s i t p o s s i b l e t o p o r t a g i v e n i m p l e m e n t a t i o n t o o t h e r g r a p h i c a l - o u t p u t
d e v i c e s . F o r e x a m p l e , a g i v e n g a m e e n g i n e m a y b e i m p l e m e n t e d t o c r e a t e a r u n n i n g D i r e c t X
p r o g r a m u s i n g t h e l a t e s t D i r e c t X S D K a n d t h e w i s h i s n o w t o p o r t t h i s t o O p e n G L . S i n c e a l l t h e
c o d e r e g a r d i n g t h e d i a l o g b e t w e e n t h e g a m e e n g i n e a n d D i r e c t X i s t o b e k e p t i n t h e v i e w c l a s s e s ,
t h i s m a k e s t h e p o r t i n g e a s i e r - w h i l s t o n l y t h e v i e w c l a s s e s s h o u l d b e a l t e r e d .
M o r e i n f o r m a t i o n o n t h e m o d e l - v i e w - c o n t r o l a r c h i t e c t u r e c a n b e f o u n d a t h t t p : / / o o t i p s . o r g / m v c -
p a t t e r n . h t m l a n d h t t p : / / c o m p s c i . a b o u t . c o m / c s / m v c p a t t e r n / i n d e x . h t m
2 . 1 M o d e l
T h e m o d e l p a r t o f t h e s t r u c t u r e w i l l c o n t a i n a l l g a m e s t r u c t u r e s . F o r e x a m p l e t h e 3 D - e n g i n e
s t r u c t u r e s w i l l b e k e p t i n t h i s c l a s s , a l s o t h e b e h a v i o u r p a t t e r n s , w h i c h h o l d s i n f o r m a t i o n o n w h a t t o
d o o n a g i v e n u s e r i n p u t , i s s t o r e d i n t h i s p a r t .
T h e m o d e l p a r t h a s n o r e l a t i o n t o t h e v i e w a n d c o n t r o l p a r t o f t h e s t r u c t u r e . T h i s m e a n s t h a t t h e
m o d e l p a r t c a n b e u s e d i n d i v i d u a l i n a n o t h e r e n v i r o n m e n t .
2 . 2 V i e w
T h e v i e w p a r t c o n t a i n s e v e r y t h i n g t h a t i n v o l v e s o u t p u t t o t h e u s e r ; i n t h i s c a s e a u d i o a n d v i s u a l
c o m m u n i c a t i o n . F o r e x a m p l e , t h i s i s t h e p l a c e t o i m p l e m e n t O p e n G L a n d D i r e c t X d r i v e r s .
T h e v i e w p a r t o f t h e s t r u c t u r e i s r e l a t e d t o t h e m o d e l p a r t . T h i s m e a n s t h a t t h e v i e w p a r t i s a b l e t o
c o m m u n i c a t e t h e c u r r e n t s t a t e o f t h e m o d e l t o t h e u s e r .
2 . 3 C o n t r o l
T h e c o n t r o l p a r t i s t h e m o s t e s s e n t i a l p a r t o f t h e s t r u c t u r e . W h e n i n i t i a l i z e d i t a l l o c a t e s a n i n s t a n c e
o f t h e v i e w a n d t h e m o d e l c l a s s e s a n d a w a i t s u s e r i n p u t . T h e u s e r i n p u t i s t h e n p a r s e d o n t o t h e
m o d e l p a r t , w h e r e t h e i n p u t i s p r o c e s s e d , a n d s h o r t l y a f t e r t h e v i e w i s a s k e d t o p r o j e c t t h e c u r r e n t
s t a t e o f t h e m o d e l .
2 . 4 E x a m p l e c o d e
T h e f o l l o w i n g e x a m p l e c o d e i s i n p s e u d o - C + + , w h i c h m e a n s t h a t i t w i l l n o t c o m p i l e .
/ * I n p u t B l o c k c o n t a i n s t h e c u r r e n t i n p u t f r o m t h e u s e r * /
c l a s s I n p u t B l o c k
{
/ / t o d o : a d d i n t e r e s t i n g v a r i a b l e s a n d f u n c t i o n s t h a t d i s p l a y s t h e u s e r
i n p u t
} ;
/ * T h e m o d e l o f t h e g a m e * /
c l a s s M o d e l
{
p u b l i c :
E n g i n e 3 D * m _ e n g i n e ;
S o u n d * m _ s o u n d ;
M o d e l ( ) ;
U p d a t e C o n t r o l ( I n p u t B l o c k * i n p u t )
{
/ / t o d o : r e a c t o n t h e c u r r e n t i n p u t
}
} ;
/ * V i e w V i s u a l i s a n i n t e r f a c e c l a s s t o b e i m p l e m e n t e d f o r v i s u a l d r i v e r s * /
c l a s s V i e w V i s u a l
{
p u b l i c :
V i e w V i s u a l ( )
{
}
/ / p u r e v i r t u a l f u n c t i o n t h a t h a n d l e s t h e c h a n g e s i n t h e c u r r e n t m o d e l
v i r t u a l v o i d U p d a t e ( M o d e l * m o d e l ) = 0 ;
}
/ * V i e w V i s u a l O p e n G L a n i m p l e m e n t a t i o n o f t h e V i e w V i s u a l i n t e r f a c e * /
c l a s s V i e w V i s u a l O p e n G L
{
p u b l i c :
V i e w V i s u a l O p e n G L ( )
{
/ / t o d o : i n i t c o d e
}
/ / d i s p l a y t h e c u r r e n t s t a t e o f t h e m o d e l
v o i d U p d a t e ( M o d e l * m o d e l )
{
/ / t o d o : p a i n t t h e m o d e l - > m _ e n g i n e
}
} ;
/ * V i e w A u d i o i s a n i n t e r f a c e c l a s s t o b e i m p l e m e n t e d f o r a u d i o d r i v e r s * /
c l a s s V i e w A u d i o
{
p u b l i c :
V i e w A u d i o ( )
{
/ / t o d o : i n i t c o d e
}
/ / p u r e v i r t u a l f u n c t i o n t h a t h a n d l e s t h e c h a n g e s i n t h e c u r r e n t m o d e l
v i r t u a l v o i d U p d a t e ( M o d e l * m o d e l ) = 0 ;
} ;
/ * V i e w A u d i o D i r e c t S o u n d a n i m p l e m e n t a t i o n o f V i e w A u d i o w h i c h w i l l p l a y s o u n d v i a
D i r e c t S o u n d * /
c l a s s V i e w A u d i o D i r e c t S o u n d
{
p u b l i c :
V i e w A u d i o D i r e c t S o u n d ( )
{
/ / t o d o : i n i t c o d e
}
v o i d U p d a t e ( M o d e l * m o d e l )
{
/ / t o d o : p l a y t h e c u r r e n t s o u n d f r o m m o d e l - > m _ s o u n d
}
} ;
/ * V i e w i s t h e c l a s s t h a t c o n n e c t s t h e v i s u a l a n d t h e a u d i o d r i v e r s * /
c l a s s V i e w
{
p r o t e c t e d :
V i e w V i s u a l * m _ v i s u a l ;
V i e w A u d i o * m _ a u d i o ;
p u b l i c :
V i e w ( M o d e l * m o d e l , V i e w V i s u a l * v i s u a l , V i e w A u d i o * a u d i o )
{
m _ m o d e l = m o d e l ;
m _ v i s u a l = v i s u a l ;
m _ a u d i o = a u d i o ;
}
v o i d U p d a t e ( )
{
m _ v i s u a l - > U p d a t e ( m _ m o d e l ) ;
m _ a u d i o - > U p d a t e ( m _ m o d e l ) ;
}
} ;
/ * C o n t r o l i s t h e c l a s s t h a t h a n d l e s i n p u t f r o m t h e u s e r a n d s t a r t s t h e o u t p u t * /
c l a s s C o n t r o l
{
e n u m
{
E S C A P E _ I S _ P R E S S E D ,
U S E R _ I N P U T
} ;
p r i v a t e :
V i e w * m _ v i e w ;
M o d e l * m _ m o d e l ;
p u b l i c :
C o n t r o l ( )
{
m _ m o d e l = n e w M o d e l ( ) ;
m _ v i e w = n e w V i e w ( m _ m o d e l , n e w V i e w V i s u a l O p e n G L ( ) ,
n e w V i e w A u d i o D i r e c t S o u n d ( ) ) ;
}
~ C o n t r o l ( )
{
d e l e t e m _ m o d e l ;
d e l e t e m _ v i e w ;
}
I n p u t B l o c k I n p u t ( i n t w h i c h )
{
s w i t c h ( w h i c h )
{
c a s e U S E R _ E X I T : i f ( e s c a p e _ i s _ p r e s s e d )
r e t u r n n e w
I n p u t B l o c k ( E S C A P E _ I S _ P R E S S E D ) ;
b r e a k ;
c a s e U S E R _ I N P U T : i f
( u s e r _ h a s _ m a d e _ a n _ i n p u t ) r e t u r n n e w
I n p u t B l o c k ( t h e _ n e w _ i n p u t _ i n f o ) ; b r e a k ;
}
}
v o i d R u n ( )
{
w h i l e ( ! I n p u t ( U S E R _ E X I T ) )
{
i f ( I n p u t ( U S E R _ I N P U T ) )
m _ m o d e l - > U p d a t e C o n t r o l ( I n p u t ( U S E R _ I N P U T ) ) ;
m _ v i e w - > U p d a t e ( ) ;
}
}
} ;
/ * T h e m a i n f u n c t i o n w h i c h a l l o c a t e s o u r s t r u c t u r e a n d s t a r t s i t * /
v o i d M a i n ( i n t a r g c , c h a r * * a r g v )
{
C o n t r o l * c o n t r o l = n e w C o n t r o l ( ) ;
c o n t r o l - > R u n ( ) ;
d e l e t e c o n t r o l ;
}
2 . 4 . 1 C o m m e n t s o n t h e c o d e
T h e a b o v e c o d e w i l l i n i t i a l l y a l l o c a t e a c o n t r o l l e r . T h i s c o n t r o l l e r t h e n a l l o c a t e s a n O p e n G L o u t p u t
d e v i c e , a D i r e c t S o u n d o u t p u t d e v i c e , a n d a m o d e l . A f t e r t h i s a l l o c a t i o n t h e m a i n p r o g r a m c a l l s t h e
R u n ( ) f u n c t i o n o f t h e c o n t r o l l e r . T h i s f u n c t i o n p u t s i t s e l f i n a p o s i t i o n w h e r e i t l o o p s u n t i l t h e u s e r
p r e s s e s t h e e x i t - b u t t o n . U n t i l t h e u s e r e x i t s t h e p r o g r a m w i l l u p d a t e t h e m o d e l a n d v i e w a c c o r d i n g
t o t h e g i v e n i n p u t . I f a n i n p u t i s g i v e n , t h e n t h i s i n p u t i s p a r s e d o n t o t h e m o d e l a n d p r o c e s s e d .
W h e n t h e i n p u t ( o r t h e l a c k o f i n p u t ) i s p r o c e s s e d t h e c o n t r o l l e r a s k s t h e v i e w t o d o a n u p d a t e .
U p o n e x i t t h e c o d e w i l l c l e a n u p n i c e l y .
2 . 5 A g r a p h i c a l r e p r e s e n t a t i o n
C O N T R O L
M O D E L V I E W
T h e a b o v e f i g u r e r e p r e s e n t s t h e c o m m u n i c a t i o n i n o u r c u r r e n t m o d e l - v i e w - c o n t r o l s t r u c t u r e .
C o n t r o l c o m m u n i c a t e s m e s s a g e s t o b o t h m o d e l a n d v i e w , w h e r e a s v i e w r e t r i e v e s d a t a f r o m t h e
m o d e l . T h e s e r e l a t i o n s s h o u l d b e c h a n g e d t o f i t t h e e x a c t n e e d s o f t h e i n d i v i d u a l i m p l e m e n t a t i o n . I
l i k e t o u s e t h e a b o v e a s i t g i v e s m e s u f f i c i e n t i n d e p e n d e n c y b e t w e e n e a c h o f t h e c l a s s e s . H o w e v e r i t
m i g h t b e a g o o d i d e a t o a d d a c o m m u n i c a t i o n l i n e f r o m m o d e l a n d v i e w t o t h e c o n t r o l l e r , i n o r d e r t o
a l l o w t h e s e t o i n f o r m a b o u t s u d d e n e r r o r s !
3 . 0 L a y e r p a t t e r n f o r a 3 D - e n g i n e
T h e i n i t i a l g o a l o f u s i n g l a y e r p a t t e r n f o r o r g a n i z i n g t h e 3 D - e n g i n e c o r e , i s t o m a k e t h e a c c e s s i n g
c o d e a s e a s y a s p o s s i b l e . A s a n e x a m p l e i t s h o u l d b e p o s s i b l e t o s a y s c e n e - > m _ a c t i v e C a m e r a -
> L o o k A t ( p o s , t a r g e t ) a n d t h e w h o l e s c e n e w i l l a d a p t t o t h i s . A l s o 3 D - m o d e l l o a d i n g s h o u l d b e k e p t
i n " h i d d e n " l a y e r s , s o e v e r y t h i n g w i l l b e h a n d l e d a t a h i g h e r l e v e l ( t h u s t h e r e n d e r i n g w i l l b e c a r r i e d
o u t b y t h e v i e w - p a r t o f o u r e n g i n e - c o r e ) . T h e w h o l e e n g i n e w i l l b e d i v i d e d i n t o a t l e a s t 3 l a y e r s ,
w h e r e e a c h l a y e r w i l l e x t e n d t o g e t m o r e a n d m o r e l o w l e v e l w i t h t h e a c t u a l m a t h .
3 . 1 T o p l a y e r
T h e t o p l a y e r g i v e s a b a s i c i n t e r f a c e o f w h i c h t h e p r o g r a m m e r c a n c h a n g e a n d u p d a t e t h e c u r r e n t
s t a t u s o f t h e s c e n e . T h i s u p p e r l a y e r c o m m u n i c a t e s t h e i n p u t t o t h e l o w e r l e v e l s o f t h i s s t r u c t u r e , f o r
e x a m p l e , w h e n a p l a y e r m o v e s t o a n e w l o c a t i o n t h e t o p l a y e r w i l l m a k e s u r e t h a t t h e g i v e n p l a y e r -
o b j e c t w i l l g e t a n e w t r a n s l a t i o n p o i n t , s o o n t h e n e x t r e p a i n t t h e p l a y e r w i l l b e r e n d e r e d a t t h e
c o r r e c t p o s i t i o n . T h e s a m e t h i n g g o e s f o r l i g h t s a n d c a m e r a s ( i n f i r s t - p e r s o n - s h o o t e r s t h e c a m e r a
e q u a l s t h e p l a y e r s p o i n t o f v i e w ) .
3 . 2 S e c o n d l a y e r
T h e s e c o n d l a y e r i s m o r e i n - d e p t h a n d c o n t a i n s f u l l c l a s s e s a n d i n t e r f a c e c l a s s e s f o r f u r t h e r
e x t e n s i o n , f o r e x a m p l e m u l t i p l e t y p e s o f l i g h t - s o u r c e s ( s p o t - l i g h t , o m n i - l i g h t , p o i n t - l i g h t , e t c ) .
3 . 3 T h i r d a n d l o w e r l a y e r s
T h e s e l a y e r s c o n t a i n t h e a c t u a l i m p l e m e n t a t i o n o f f o r e x a m p l e , l i g h t , h i e a r c h y - o b j e c t s e t c .
3 . 4 E x a m p l e c o d e
T o e x p l a i n t h e ( v a g u e ) d e f i n i t i o n o f a l a y e r e d 3 D - e n g i n e I w i l l h e r e g i v e s o m e s a m p l e c o d e .
/ * s e c o n d l a y e r c o m p o n e n t - l i g h t , c o n t a i n s t h e i n t e r f a c e f o r t h e d i f f e r e n t l i g h t - s o u r c e
t y p e s t o i m p l e m e n t * /
c l a s s L i g h t
{
p u b l i c :
e n u m
{
O M N I
} ;
i n t m _ l i g h t _ t y p e ;
v i r t u a l v o i d * G e t D a t a ( ) = 0 ;
} ;
/ * t h i r d l a y e r c o m p o n e n t - l i g h t o m n i - t h i s i s a d i r e c t i m p l e m e n t a t i o n o f l i g h t * /
c l a s s L i g h t O m n i : p u b l i c L i g h t
{
p u b l i c :
L i g h t O m n i D a t a * m _ l i g h t _ o m n i _ d a t a ;
L i g h t O m n i ( ) { m _ l i g h t _ t y p e = O M N I ; }
v o i d * G e t D a t a ( ) { r e t u r n m _ l i g h t _ o m n i _ d a t a ; }
} ;
/ * s e c o n d l a y e r c o m p o n e n t - o b j e c t , c o n t a i n s t h e i n t e r f a c e f o r t h e o b j e c t s t o i m p l e m e n t
* /
c l a s s O b j e c t
{
p u b l i c :
V e c t o r * m _ v e r t i c e s ;
F a c e * m _ f a c e s ;
/ / s e t s t h e c u r r e n t t r a n s l a t i o n p o i n t f o r t h e g i v e n o b j e c t
v i r t u a l v o i d S e t T r a n s l a t i o n ( V e c t o r &