/***************************************************************************** ******************************************************************************/ #include "dive.vh" #include "walls.vh" #include "column.vh" #include "trees.vh" #include "gateway.vh" #ifndef M_PI #define M_PI (3.14159257) #endif #ifndef HAVE_STATIC_OBJS #undef HAVE_STATIC_OBJS #endif /* Trees */ #define F_MAT "TREES_GROUND" #define T_MAT "TREES_TRUNK" /* Pool definition */ #define POOL_LENGTH (30.0) #define POOL_WIDTH (15.0) #define POOL_DEPTH (0.5) #define P_MAT "wheat" #define PG_MAT "sienna" /* Corridor */ #define CORRIDOR_WIDTH (10.0) /* Walls definition */ #define WALL_WIDTH (0.3) /* Stairs definition */ #define STAIRS_LENGTH (((POOL_LENGTH+POOL_WIDTH)/2)/10) #define STAIRS_HEIGHT (POOL_DEPTH/3) #define STAIRS_WIDTH (STAIRS_LENGTH/10) /* Columns */ #define COL_MAT "BOTTLE_GREEN_M" #define COLB_MAT "seagreen" #define COL_RADIUS (0.005*(POOL_LENGTH+POOL_WIDTH)) world "body_gallery.sics.se" { info "A gallery of bodies: A user can select one and change its body" start v 4 0 -8 background 0.2 0.4 0.8 % fog 0.0005 % multicast "233.17.65.129" } #define stairs3(MAT) \ material MAT \ view 0 { \ BOXVECTOR 3 \ RBOX \ v (-0.5*STAIRS_LENGTH) (3*STAIRS_HEIGHT) (0*STAIRS_WIDTH) \ v (0.5*STAIRS_LENGTH) (2*STAIRS_HEIGHT) (1*STAIRS_WIDTH) \ RBOX \ v (-0.5*STAIRS_LENGTH) (2*STAIRS_HEIGHT) (1*STAIRS_WIDTH) \ v (0.5*STAIRS_LENGTH) (1*STAIRS_HEIGHT) (2*STAIRS_WIDTH) \ RBOX \ v (-0.5*STAIRS_LENGTH) (1*STAIRS_HEIGHT) (2*STAIRS_WIDTH) \ v (0.5*STAIRS_LENGTH) (0*STAIRS_HEIGHT) (3*STAIRS_WIDTH) \ } #define front_wall() \ translation v (0.5*WALL_WIDTH) 0 0 \ wall((POOL_LENGTH+WALL_WIDTH), POOL_DEPTH, WALL_WIDTH, P_MAT) \ subs object { \ fixedxyz v 0 M_PI 0 \ stairs3(P_MAT) \ } \ subs object { \ fixedxyz v 0 M_PI 0 \ translation v (-0.25*POOL_LENGTH) 0 0 \ stairs3(P_MAT) \ } \ subs object { \ fixedxyz v 0 M_PI 0 \ translation v (0.25*POOL_LENGTH) 0 0 \ stairs3(P_MAT) \ } #define side_wall() \ translation v (0.5*WALL_WIDTH) 0 0 \ wall((POOL_WIDTH+WALL_WIDTH), POOL_DEPTH, WALL_WIDTH, P_MAT) \ subs object { \ fixedxyz v 0 M_PI 0 \ stairs3(P_MAT) \ } object { translation v 0 0 (POOL_WIDTH*0.5 + CORRIDOR_WIDTH) fixedxyz v 0.0 0 0.0 cool_invisible_pos_gateway("http://www.sics.se/dive/data/sics.vr","sics","WHEAT_M", "BOTTLE_GREEN_M","GREEN_M", 0, 0, 0) } /* Pool walls */ object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif translation v 0 (-POOL_DEPTH) (0.5*POOL_WIDTH) front_wall() } object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif translation v 0 (-POOL_DEPTH) (-0.5*POOL_WIDTH) fixedxyz v 0 M_PI 0 front_wall() } object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif translation v (0.5*POOL_LENGTH) (-POOL_DEPTH) 0 fixedxyz v 0 (0.5*M_PI) 0 side_wall() } object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif translation v (-0.5*POOL_LENGTH) (-POOL_DEPTH) 0 fixedxyz v 0 (-0.5*M_PI) 0 side_wall() } /* Pool ground */ object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif material PG_MAT texture "http://www.sics.se/dive/data/textures/stone-3b.tga.rgb" translation v 0 (-POOL_DEPTH) 0 view 0 { N_M_POLY 1 4 (0+T_PER_VERTEX) N_POLY 4 v (0.5*POOL_LENGTH) 0 (0.5*POOL_WIDTH) t 0 0 v (0.5*POOL_LENGTH) 0 (-0.5*POOL_WIDTH) t 0 POOL_WIDTH v (-0.5*POOL_LENGTH) 0 (-0.5*POOL_WIDTH) t POOL_LENGTH POOL_WIDTH v (-0.5*POOL_LENGTH) 0 (0.5*POOL_WIDTH) t POOL_LENGTH 0 } } /* Columns */ /* VIRMAN */ object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif translation v (0*POOL_LENGTH) (-POOL_DEPTH) (0.25*POOL_WIDTH) angular_column(COL_MAT, COLB_MAT, COL_RADIUS, POOL_DEPTH) subs object { begin.tcl proc rotate_me {} { dive_fixedXYZ [dive_self] 0 0.1 0 LOCAL_C } dive_timer [dive_self] 200 rotate_me end.tcl translation v 0 (POOL_DEPTH + 1) 0 subs #include "body_virman.vr" } } /* SOLDIER */ object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif translation v (0*POOL_LENGTH) (-POOL_DEPTH) (-0.25*POOL_WIDTH) angular_column(COL_MAT, COLB_MAT, COL_RADIUS, POOL_DEPTH) subs object { begin.tcl proc rotate_me {} { dive_fixedXYZ [dive_self] 0 0.1 0 LOCAL_C } dive_timer [dive_self] 250 rotate_me end.tcl translation v 0 (POOL_DEPTH + 1.8) 0 subs #include "body_soldier.vr" } } /* BLOCKIE */ object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif translation v (0.125*POOL_LENGTH) (-POOL_DEPTH) 0 angular_column(COL_MAT, COLB_MAT, COL_RADIUS, POOL_DEPTH) subs object { translation v 0 (POOL_DEPTH + 0.8) 0 begin.tcl proc rotate_me {} { dive_fixedXYZ [dive_self] 0 0.1 0 LOCAL_C } dive_timer [dive_self] 300 rotate_me end.tcl subs #include "body_blockie.vr" } } /* NEWT: Osu's and Frost's body */ object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif translation v (0.25*POOL_LENGTH) (-POOL_DEPTH) (0.25*POOL_WIDTH) angular_column(COL_MAT, COLB_MAT, COL_RADIUS, POOL_DEPTH) } object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif translation v (0.25*POOL_LENGTH) (-POOL_DEPTH) (-0.25*POOL_WIDTH) angular_column(COL_MAT, COLB_MAT, COL_RADIUS, POOL_DEPTH) } object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif translation v (0.375*POOL_LENGTH) (-POOL_DEPTH) 0 angular_column(COL_MAT, COLB_MAT, COL_RADIUS, POOL_DEPTH) subs object { translation v 0 (POOL_DEPTH) 0 begin.tcl proc rotate_me {} { dive_fixedXYZ [dive_self] 0 0.1 0 LOCAL_C } dive_timer [dive_self] 300 rotate_me end.tcl subs #include "body_newt.vr" } } object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif translation v (-0.125*POOL_LENGTH) (-POOL_DEPTH) 0 angular_column(COL_MAT, COLB_MAT, COL_RADIUS, POOL_DEPTH) } object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif translation v (-0.25*POOL_LENGTH) (-POOL_DEPTH) (0.25*POOL_WIDTH) angular_column(COL_MAT, COLB_MAT, COL_RADIUS, POOL_DEPTH) } object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif translation v (-0.25*POOL_LENGTH) (-POOL_DEPTH) (-0.25*POOL_WIDTH) angular_column(COL_MAT, COLB_MAT, COL_RADIUS, POOL_DEPTH) } /* Body Cartoon */ object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif translation v (-0.375*POOL_LENGTH) (-POOL_DEPTH) 0 angular_column(COL_MAT, COLB_MAT, COL_RADIUS, POOL_DEPTH) subs object { translation v 0 (POOL_DEPTH) 0 begin.tcl proc rotate_me {} { dive_fixedXYZ [dive_self] 0 0.1 0 LOCAL_C } dive_timer [dive_self] 300 rotate_me end.tcl subs #include "body_cartoon.vr" } } /* Trees */ #define tree_wall(DIST, HEIGHT) \ subs object { \ simple_pine_tree(HEIGHT, T_MAT, F_MAT) \ } \ subs object { \ translation v (1*DIST) 0 0 \ simple_pine_tree(0.75*(HEIGHT), T_MAT, F_MAT) \ } \ subs object { \ translation v (-1*DIST) 0 0 \ simple_pine_tree(0.75*(HEIGHT), T_MAT, F_MAT) \ } \ subs object { \ translation v (2*DIST) 0 0 \ simple_pine_tree(0.5*(HEIGHT), T_MAT, F_MAT) \ } \ subs object { \ translation v (-2*DIST) 0 0 \ simple_pine_tree(0.5*(HEIGHT), T_MAT, F_MAT) \ } object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif translation v ((0.5*POOL_LENGTH)+(2*CORRIDOR_WIDTH)) 0 ((0.5*POOL_WIDTH)+(2*CORRIDOR_WIDTH)) fixedxyz v 0 (0.25*M_PI) 0 tree_wall((0.3*CORRIDOR_WIDTH), (0.5*CORRIDOR_WIDTH)) } object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif translation v ((0.5*POOL_LENGTH)+(2*CORRIDOR_WIDTH)) 0 -((0.5*POOL_WIDTH)+(2*CORRIDOR_WIDTH)) fixedxyz v 0 (0.75*M_PI) 0 tree_wall((0.3*CORRIDOR_WIDTH), (0.5*CORRIDOR_WIDTH)) } object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif translation v -((0.5*POOL_LENGTH)+(2*CORRIDOR_WIDTH)) 0 ((0.5*POOL_WIDTH)+(2*CORRIDOR_WIDTH)) fixedxyz v 0 (-0.25*M_PI) 0 tree_wall((0.3*CORRIDOR_WIDTH), (0.5*CORRIDOR_WIDTH)) } object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif translation v -((0.5*POOL_LENGTH)+(2*CORRIDOR_WIDTH)) 0 -((0.5*POOL_WIDTH)+(2*CORRIDOR_WIDTH)) fixedxyz v 0 (-0.75*M_PI) 0 tree_wall((0.3*CORRIDOR_WIDTH), (0.5*CORRIDOR_WIDTH)) } /* Landscape */ /* object { material "BOTTLE_GREEN_M" texture "http://www.sics.se/dive/data/textures/grass2.rgb" translation v 0 -0.1 0 view 0 { N_M_POLY 1 4 (0+T_PER_VERTEX) N_POLY 4 v 500 0 -500 t 0 0 v -500 0 -500 t 0 200 v -500 0 500 t 200 200 v 500 0 500 t 200 0 } } */ object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif material "BROWN_M" texture "http://www.sics.se/dive/data/textures/stone-2c.tga.rgb" view 0 { N_M_POLY 4 16 (0+T_PER_VERTEX) N_POLY 4 v (0.5*(POOL_LENGTH+(2*WALL_WIDTH))) 0 (0.5*(POOL_WIDTH+(2*WALL_WIDTH))) t (0.5*(POOL_LENGTH+(2*WALL_WIDTH))) (0.5*(POOL_WIDTH+(2*WALL_WIDTH))) v (-0.5*(POOL_LENGTH+(2*WALL_WIDTH))) 0 (0.5*(POOL_WIDTH+(2*WALL_WIDTH))) t (-0.5*(POOL_LENGTH+(2*WALL_WIDTH))) (0.5*(POOL_WIDTH+(2*WALL_WIDTH))) v (-0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) 0 (0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) t (-0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) (0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) v (0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) 0 (0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) t (0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) (0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) N_POLY 4 v (-0.5*(POOL_LENGTH+(2*WALL_WIDTH))) 0 (0.5*(POOL_WIDTH+(2*WALL_WIDTH))) t (-0.5*(POOL_LENGTH+(2*WALL_WIDTH))) (0.5*(POOL_WIDTH+(2*WALL_WIDTH))) v (-0.5*(POOL_LENGTH+(2*WALL_WIDTH))) 0 (-0.5*(POOL_WIDTH+(2*WALL_WIDTH))) t (-0.5*(POOL_LENGTH+(2*WALL_WIDTH))) (-0.5*(POOL_WIDTH+(2*WALL_WIDTH))) v (-0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) 0 (-0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) t (-0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) (-0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) v (-0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) 0 (0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) t (-0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) (0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) N_POLY 4 v (-0.5*(POOL_LENGTH+(2*WALL_WIDTH))) 0 (-0.5*(POOL_WIDTH+(2*WALL_WIDTH))) t (-0.5*(POOL_LENGTH+(2*WALL_WIDTH))) (-0.5*(POOL_WIDTH+(2*WALL_WIDTH))) v (0.5*(POOL_LENGTH+(2*WALL_WIDTH))) 0 (-0.5*(POOL_WIDTH+(2*WALL_WIDTH))) t (0.5*(POOL_LENGTH+(2*WALL_WIDTH))) (-0.5*(POOL_WIDTH+(2*WALL_WIDTH))) v (0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) 0 (-0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) t (0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) (-0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) v (-0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) 0 (-0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) t (-0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) (-0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) N_POLY 4 v (0.5*(POOL_LENGTH+(2*WALL_WIDTH))) 0 (0.5*(POOL_WIDTH+(2*WALL_WIDTH))) t (0.5*(POOL_LENGTH+(2*WALL_WIDTH))) (0.5*(POOL_WIDTH+(2*WALL_WIDTH))) v (0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) 0 (0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) t (0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) (0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) v (0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) 0 (-0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) t (0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) (-0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) v (0.5*(POOL_LENGTH+(2*WALL_WIDTH))) 0 (-0.5*(POOL_WIDTH+(2*WALL_WIDTH))) t (0.5*(POOL_LENGTH+(2*WALL_WIDTH))) (-0.5*(POOL_WIDTH+(2*WALL_WIDTH))) } } object { nograsp on #ifdef HAVE_STATIC_OBJS static_rec on #endif material "BOTTLE_GREEN_M" texture "http://www.sics.se/dive/data/textures/grass2.rgb" view 0 { N_M_POLY 4 16 (0+T_PER_VERTEX) N_POLY 4 v (0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) 0 (0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) t (0.2*(POOL_LENGTH+CORRIDOR_WIDTH)) (0.2*(POOL_WIDTH+CORRIDOR_WIDTH)) v (-0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) 0 (0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) t (-0.2*(POOL_LENGTH+CORRIDOR_WIDTH)) (0.2*(POOL_WIDTH+CORRIDOR_WIDTH)) v (-500) 0 (500) t (-200) (200) v (500) 0 (500) t (200) (200) N_POLY 4 v (-0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) 0 (0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) t (-0.2*(POOL_LENGTH+CORRIDOR_WIDTH)) (0.2*(POOL_WIDTH+CORRIDOR_WIDTH)) v (-0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) 0 (-0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) t (-0.2*(POOL_LENGTH+CORRIDOR_WIDTH)) (-0.2*(POOL_WIDTH+CORRIDOR_WIDTH)) v (-500) 0 (-500) t (-200) (-200) v (-500) 0 (500) t (-200) (200) N_POLY 4 v (-0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) 0 (-0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) t (-0.2*(POOL_LENGTH+CORRIDOR_WIDTH)) (-0.2*(POOL_WIDTH+CORRIDOR_WIDTH)) v (0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) 0 (-0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) t (0.2*(POOL_LENGTH+CORRIDOR_WIDTH)) (-0.2*(POOL_WIDTH+CORRIDOR_WIDTH)) v (500) 0 (-500) t (200) (-200) v (-500) 0 (-500) t (-200) (-200) N_POLY 4 v (0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) 0 (0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) t (0.2*(POOL_LENGTH+CORRIDOR_WIDTH)) (0.2*(POOL_WIDTH+CORRIDOR_WIDTH)) v (500) 0 (500) t (200) (200) v (500) 0 (-500) t (200) (-200) v (0.5*(POOL_LENGTH+CORRIDOR_WIDTH)) 0 (-0.5*(POOL_WIDTH+CORRIDOR_WIDTH)) t (0.2*(POOL_LENGTH+CORRIDOR_WIDTH)) (-0.2*(POOL_WIDTH+CORRIDOR_WIDTH)) } } object { material { diffuse 0 0 0 ambient 0.2 0.4 0.8 } texture "http://www.sics.se/dive/data/textures/clouds.rgb" translation v 0 100 0 view 0 { N_M_POLY 1 4 (0+T_PER_VERTEX) N_POLY 4 v 1000 0 -1000 t 0 0 v 1000 0 1000 t 5 0 v -1000 0 1000 t 5 5 v -1000 0 -1000 t 0 5 } } object { material { diffuse 0 0 0 ambient 0.2 0.4 0.8 } texture "http://www.sics.se/dive/data/textures/renault_mtn.rgb" translation v 0 50 0 view 0 { N_M_POLY 4 16 (0+T_PER_VERTEX) N_POLY 4 v 550 0 -550 t 0 0 v 550 0 550 t 5 0 v 550 50 550 t 5 1 v 550 50 -550 t 0 1 N_POLY 4 v 550 0 550 t 0 0 v -550 0 550 t 5 0 v -550 50 550 t 5 1 v 550 50 550 t 0 1 N_POLY 4 v -550 0 550 t 0 0 v -550 0 -550 t 5 0 v -550 50 -550 t 5 1 v -550 50 550 t 0 1 N_POLY 4 v -550 0 -550 t 0 0 v 550 0 -550 t 5 0 v 550 50 -550 t 5 1 v -550 50 -550 t 0 1 } } object { material { diffuse 0 0 0 ambient 0.2 0.4 0.8 } texture "http://www.sics.se/dive/data/textures/treewall.rgb" translation v 0 -0.1 0 view 0 { N_M_POLY 4 16 (0+T_PER_VERTEX) N_POLY 4 v 500 0 -500 t 0 0 v 500 0 500 t 1 0 v 550 50.1 550 t 1 1 v 550 50.1 -550 t 0 1 N_POLY 4 v 500 0 500 t 0 0 v -500 0 500 t 1 0 v -550 50.1 550 t 1 1 v 550 50.1 550 t 0 1 N_POLY 4 v -500 0 500 t 0 0 v -500 0 -500 t 1 0 v -550 50.1 -550 t 1 1 v -550 50.1 550 t 0 1 N_POLY 4 v -500 0 -500 t 0 0 v 500 0 -500 t 1 0 v 550 50.1 -550 t 1 1 v -550 50.1 -550 t 0 1 } }