home *** CD-ROM | disk | FTP | other *** search
/ ftp.hitl.washington.edu / ftp.hitl.washington.edu.tar / ftp.hitl.washington.edu / pub / people / habib / kodak / variables.h < prev    next >
C/C++ Source or Header  |  2000-04-18  |  20KB  |  583 lines

  1. #include "frame_rate.h"
  2. // #include <mmsystem.h>  // WinUnix
  3. // #include <winbase.h>  
  4. // #include <dsound.h>
  5. #include "define.h"
  6.  
  7. #define FLAG int
  8. #define html //
  9.  
  10. double zero1 = 0.0;
  11. double zero2 = 0.0;
  12. double NaN = 999999999; 
  13.  
  14. /*    Create checkerboard texture    */
  15. #define    checkImageWidth 64
  16. #define    checkImageHeight 64
  17. static GLubyte checkImage[checkImageHeight][checkImageWidth][4];
  18. static GLuint texName[10];
  19.  
  20.  
  21. extern void add_quats (double, double, double);
  22. extern void add_quats (double *, double *, double *);
  23.  
  24. struct point {float x,y,z;} ;
  25. struct car_location {
  26.     float x,y,z;
  27.     float quat[4];
  28. };
  29. #define vector point
  30.  
  31. struct vector vx,vy,vz; // those are fixed vectors defined in initialize_some_var
  32. int number_of_mirrors=0;
  33. float EYE_DISP = 1.0;
  34.  
  35. struct mirror { 
  36.    struct point cr,    // center of the mirror.
  37.       c1, c2, c3, c4,  // Those are the 4 corners in the Absolute World coordinate system (lk, up, side) (001, 010, 100)
  38.       cc1,cc2,cc3,cc4; // Those are the 4 corners of the mirror in the camera coordinate system. (lk_rt, up_rt, side_rt).
  39.    struct vector nl;   // normal vector, should have a lenght of 1.
  40.    struct vector up;   // up vector
  41.    struct vector side; // side vector
  42.    double width;        // this is the width /2
  43.    double height; } m1[100]; // this is the height /2
  44.  
  45. typedef enum  {
  46.   RESERVED, BODY_SIDE, BODY_EDGE, BODY_WHOLE, ARM_SIDE, ARM_EDGE, ARM_WHOLE,
  47.   LEG_SIDE, LEG_EDGE, LEG_WHOLE, EYE_SIDE, EYE_EDGE, EYE_WHOLE, DINOSAUR
  48. } displayLists;
  49.  
  50. double angle = -150;   /* in degrees */
  51. GLboolean doubleBuffer = GL_TRUE, iconic = GL_FALSE, keepAspect = GL_FALSE;
  52. int beginx, beginy;
  53. double curquat[4];
  54. double curquatc[4]; // curquat for the Car.
  55. double curquat_mirror[4];
  56. double curquat_top_view[4];
  57. double curquat_light0[4];
  58. double curquat_light1[4];
  59. double curquat_Geye[4];
  60. double lastquat_Geye[4];
  61. double lastquat[4];
  62. double lastquat_mirror[4];
  63. double lastquat_top_view[4];
  64. double lastquat_light0[4];
  65. double lastquat_light1[4];
  66.  
  67. GLdouble bodyWidth = 2.0;
  68. int newModel = 1;
  69. double scalefactor = 1.0;
  70.  
  71. GLdouble TOP = 5;      /* it is the limits of the bounding box */
  72. GLdouble BOTTOM = -5; // -100;  /* it is the limits of the bounding box */
  73.  
  74. GLdouble LEFT = -3; //-1300.8/10.5;    /* it is the limits of the bounding box */
  75. GLdouble RIGHT = 3; // 1300.8/10.5;    /* it is the limits of the bounding box */
  76.  
  77. GLdouble TRANSLATE_X = 0;  // because when we translate we want the rotation to be in the middle of the 
  78. GLdouble TRANSLATE_Y = 0;  // screen.
  79.                         
  80. GLdouble TRANSLATE_Z =    5000.0;
  81. GLdouble TRANSLATE_H =    0.0;
  82.  
  83. GLdouble NEAR2 =  0;
  84. GLdouble FAR2 =   3;
  85.  
  86. /* *INDENT-OFF* */
  87. GLdouble body[][2] = { {0, 3}, {1, 1}, {5, 1}, {8, 4}, {10, 4}, {11, 5},
  88.   {11, 11.5}, {13, 12}, {13, 13}, {10, 13.5}, {13, 14}, {13, 15}, {11, 16},
  89.   {8, 16}, {7, 15}, {7, 13}, {8, 12}, {7, 11}, {6, 6}, {4, 3}, {3, 2},
  90.   {1, 2} };
  91. GLdouble arm[][2] = { {8, 10}, {9, 9}, {10, 9}, {13, 8}, {14, 9}, {16, 9},
  92.   {15, 9.5}, {16, 10}, {15, 10}, {15.5, 11}, {14.5, 10}, {14, 11}, {14, 10},
  93.   {13, 9}, {11, 11}, {9, 11} };
  94. GLdouble leg[][2] = { {8, 6}, {8, 4}, {9, 3}, {9, 2}, {8, 1}, {8, 0.5}, {9, 0},
  95.   {12, 0}, {10, 1}, {10, 2}, {12, 4}, {11, 6}, {10, 7}, {9, 7} };
  96. GLdouble eyezz[][2] = { {8.75, 15}, {9, 14.7}, {9.6, 14.7}, {10.1, 15},
  97.   {9.6, 15.25}, {9, 15.25} };
  98.  
  99. GLdouble skinColor[] = {0.1, 1.0, 0.1, 1.0}, eyeColor[] = {1.0, 0.2, 0.2, 1.0};
  100.  
  101. char *vrml_city_filename, *vrml_vehicle_filename, *vrml_sensors_filename, *vrml_vehicle_filenames[6][6];
  102. char *vrml_sphere_filename, *texture_directory;
  103.  
  104. // Structures --------------------------------------------------------------------------- Structures
  105. // Structures -------------------------------------------------------------------------- Structures
  106. // Structures -------------------------------------------------------------------------- Structures
  107.  
  108. struct bmm  {
  109.          double bar;     /*pr calc xmin xbar xmax ymin... */
  110.          double min;     /*sans parcourir a chaque fois   */
  111.          double max;     /*trois fois l'array xc, yc, zc. */
  112. } ;
  113.  
  114. struct color {
  115.         char r;
  116.         char g;
  117.         char b;
  118. };
  119.  
  120. struct scr_bar
  121.      // corner of the green square
  122.          int x_g_min, x_g_max, y_g_min, y_g_max;
  123.  
  124.      // corner of the red square
  125.          int x_r_min, x_r_max, y_r_min, y_r_max;
  126.  
  127.          // corners of the middle square.
  128.          int x_m_min, x_m_max, y_m_min, y_m_max;
  129.  
  130.          // corners of the higher triangle
  131.          int x_ht_min, x_ht_max, y_ht_min, y_ht_max;
  132.  
  133.          // corners of the lower triangle
  134.          int x_lt_min, x_lt_max, y_lt_min, y_lt_max;
  135. };
  136.  
  137. struct rect
  138. {
  139.          int xmin, xmax, ymin, ymax;
  140. };
  141.  
  142. // Joystick Variables
  143. double myjoyinfoDwPreviousButtons;
  144. FLAG FLAG_MOVE_CAR = 1;  
  145. FLAG FLAG_MOVE_SCENE = 1;  
  146. FLAG WALK_SLOWLY = 0;
  147. FLAG FLAG_STEREO = 0; 
  148. FLAG FLAG_STEREO_NATT = 0; 
  149. // Variables of my data (The Cloud of points) ------------------------- Variables of my data (The Cloud of points)
  150. // Variables of my data (The Cloud of points) ------------------------- Variables of my data (The Cloud of points)
  151. // Variables of my data (The Cloud of points) ------------------------- Variables of my data (The Cloud of points)
  152.  
  153. float *var[100]; // Contains all the variables at hand.
  154.  
  155. float *var_animation;
  156. double var_animation_min;
  157. double var_animation_max;
  158. char var_name[100][40];
  159. int nbr_of_col = 0;
  160. float *zc; // Contain the z value 4th column (cloud of pts)
  161. float *yc; // Contain the y value 3rd column (cloud of pts)
  162. float *xc; // Contain the x value 2nd column (cloud of pts)
  163.  
  164. int *col1; // I have 5 column in my data this is the first one
  165. int *col4; // I have 5 column in my data this is the 5th   one
  166.  
  167. double *czz;  /* arrays containg the color information of the 3D pts */
  168. double *cyy;  /* arrays containg the color information of the 3D pts */
  169. double *cxx;  /* arrays containg the color information of the 3D pts */
  170.  
  171. double xmin,xmin_e ; 
  172. double xmax,xmax_e ; 
  173. double ymin,ymin_e ; 
  174. double ymax,ymax_e ; 
  175. double zmin,zmin_e ; 
  176. double zmax,zmax_e ; 
  177.  
  178. double delta_min;
  179. double sig_min;
  180. double deltax =1000; // abs (xmax-xmin)
  181. double deltay =1000 ; // abs (ymax-ymin)
  182. double deltaz =1000; // abs (zmax-zmin)
  183.  
  184. double deltax_n = 500 ; // abs (xmax-xmin) after normalization to have normalized scaling
  185. double deltay_n = 400; // abs (ymax-ymin) after normalization to have normalized scaling
  186. double deltaz_n = 400; // abs (zmax-zmin) after normalization to have normalized scaling
  187.  
  188. double xbar = 1;  /* Ce sont les coordonnes du */
  189. double ybar = 2;  /* centre du gravite de la   */
  190. double zbar = 3;  /* carte de profondeur       */
  191.  
  192. double sigx; // sigmax
  193. double sigy; // sigmay
  194. double sigz; // sigmaz
  195.  
  196. double sig_x_n; // sigmax after normalization to have normalized scaling
  197. double sig_y_n; // sigmay after normalization to have normalized scaling
  198. double sig_z_n; // sigmaz after normalization to have normalized scaling
  199.  
  200. int dim[1]; // Number of 3D points => dim[0]-1 is the last indice. [of the point with the Nans].
  201.  
  202. // Variables for my camera  -------------------------------------------- Variables for my camera
  203. // Variables for my camera  -------------------------------------------- Variables for my camera
  204. // Variables for my camera  -------------------------------------------- Variables for my camera
  205. double transX, transY, transZ;
  206. double baseline = -1.14; // 0.2;
  207. struct point CRot; // it's the center arround which the car is rotating, in the car coordinate system.
  208.                    // this center is placed by putting the eye at the desired location and clicking on 'a'
  209.                    // if I am not mistaken (to come).
  210. float GeyeHIGHT = 3;
  211. struct point DriverPos ; //It's the relative position of the eye in the car.
  212. struct point eye,eye1,eye2, eye_mirror,  
  213.        eyec, // It's where the car is in the scene.
  214.        eyeP, // It's the Projection of eye in the car coordinate system:
  215.              // that's (lkc_rt, upc_rt, horc_rt.
  216.        Geye, // God's eye in the absolute coordinate system (000, 001, 010, 100)
  217.        Geye_V, // God's eye in the vehicle coord system (eyec, lkc_rt, upc_rt, horc_rt)
  218.        Gup_V,  // God's up direction in the vehicle coord system (eyec, lkc_rt, upc_rt, horc_rt)
  219.        Glk, Gup, Ghor, // God's lk, up and hor.
  220.        lk,    up,     hor,
  221.        lk_rt, up_rt,  hor_rt, 
  222.        lkc_rt,upc_rt, horc_rt, 
  223.        lkP   ,upP,    horP, // it's the eye(lk_rt, up_rt, hor_rt) projected in 
  224.                             // lkc_rt, upc_rt, horc_rt;
  225.        meye, MEM_POINT, pos_light0, pos_light1, *ScenePts;  
  226.                            // meye is the mirror eye.
  227.                            // eye is (0,20,-500)  eye is the eye after the quaternion rotation
  228.                            // up  is (0,1,0)     up_rt  is up  after the quaternion rotation.
  229.                            // hor is (1,0,0)     hor_rt is hor after the quaternion rotation.
  230.                            // lk  is (0,0,1)
  231. double z,teta=3.1415 ,phi=0,teta2;
  232. double cam_angle = 157;
  233. double aspect_ratio = 1.333;
  234. GLdouble  m[4][4],invm [4][4];
  235. GLdouble mc[4][4];
  236. GLfloat mf[4][4],invmf[4][4];
  237.  
  238. // So that I can draw on memory directly.
  239. // PIXELFORMATDESCRIPTOR pfd ;
  240.  
  241.  
  242. // Flags ------------------------------------------------------------------------------------------------ Flags
  243. // Flags ------------------------------------------------------------------------------------------------ Flags
  244. // Flags ------------------------------------------------------------------------------------------------ Flags
  245. FLAG FLAG_DISTORTION_WITH_TEXTURE = 0;
  246. FLAG FLAG_DISTORTION_WITHOUT_TEXTURE = 0;
  247. FLAG FLAG_TEXTURE_MAP_SPHERE = 0;
  248. FLAG FLAG_MOVE_GODS_EYE = 0;
  249. FLAG viewport = 1; // initially no command bar. viewport is the readish command bar
  250. FLAG FLAG_TOP_VIEW = 0;
  251. FLAG FLAG_SELECTED_MIRROR = 0;
  252. FLAG FLAG_TOGGLE_MIRROR[100];
  253. FLAG FLAG_FRONT_VIEW=0;
  254. FLAG FLAG_TOGGLE_MENU1 = 1;      
  255. FLAG FLAG_TOGGLE_TEXTURE_MAP;
  256. FLAG DRAW_CARRE1 = 0;
  257. FLAG DRAW_CARRE2 = 0;
  258. FLAG DRAW_CARRE3 = 0;
  259. FLAG FLAG_DROP_MENU= 0;
  260. FLAG TOGGLE_BOX = 0;
  261. FLAG TRANSLATE_TO_GRAVITY=0;
  262. FLAG TRANSLATE_TO_MIDDLE =1;
  263. FLAG  displayListInited = 0;
  264. FLAG Draw_relative_axe = 0;
  265. FLAG Draw_light_position = 0;
  266. FLAG spinning = 0;
  267. FLAG expand_carre1 = 0;
  268. FLAG expand_carre2 = 0;
  269. FLAG expand_carre3 = 0;
  270. FLAG APPLY_MOUSE_MOTION = 0;
  271. FLAG FLAG_ORTHO_PERSP = 1; // 0 FOR ORTHO.
  272. FLAG FLAG_FIX_MIRROR = 0;
  273. FLAG FLAG_HORIZ = 0;
  274. FLAG SHOW_LOCATION_DIRECTION_OF_LIGHTS = 0; // show direction or location of lights
  275. FLAG LIGHTS_FIX_WITH_CAMERA = 0;
  276. enum {lights, lights_translate, lights_rotate, walk_slowly, configurations,
  277.       save_configuration, other, empty, load_car_num, recordCarMvmt} FLAG_WHICH_KEY_NEXT;
  278.  
  279. enum  {baseline_zoom, rotating, translating, scaling, motion_carre1, motion_carre2, motion_carre3, 
  280. vertical_adj,mirror_translate, mirror_translateZ, top_view_com, big_win_com,translatingz,flag_mirror_rotate,
  281. flag_expand_mirror1_x,flag_expand_mirror1_y,flag_expand_mirror1_xy,flag_top_expand_xy,
  282. flag_move_light1, flag_move_light0, flag_rotate_light1, flag_rotate_light0,flag_zoom_y,
  283. rotating_Geye, flag_change_light_intensity } 
  284. flag_motion, flag_motion_command,flag_motion_win;
  285. FLAG VIRGULE = 0;
  286. FLAG VIRGULE_AT_END_OF_LINE = 0;
  287.  
  288. enum {upp, down, bandflag}
  289. flag_elevator;
  290.  
  291. // int SCALE_DEFAULT = 1 ; not necessary since by default it's 1!!!
  292. int SCALE_SIGMA   = 0 ;
  293. int SCALE_MIDDLE  = 0 ;
  294.  
  295. // OpenGl Variables. --------------------------------------------------------------------- OpenGl Variables.
  296. double pt_size = 1.0;
  297. int fraction =1 ; // the fraction of the points displayed.
  298. double fogDensity = 0.02;
  299.  
  300. // LIGHT Variables.
  301. point   Center_Of_Rot_Of_Lights;  
  302. GLfloat lightZeroPosition[4] = { 1.0f, 1.0f,   1.0f, 0.0f};  // x,y,z,pos (pos=0 => directional)
  303. GLfloat lightOnePosition[4]  = { 1.0f, 1.0f , -1.0f, 0.0f};  // x,y,z,pos (pos=0 => directional)
  304.  
  305. GLfloat light2Position[4] = { 1.0f, -1.0f,  -1.0f, 0.0f};  // x,y,z,pos (pos=0 => directional)
  306. GLfloat light3Position[4]  = { 1.0f, -1.0f , 1.0f, 0.0f};  // x,y,z,pos (pos=0 => directional)
  307.  
  308.  
  309.  
  310. GLfloat ambi[] = {0.1f, 0.1f, 0.1f, 0.1f};
  311.  
  312. GLfloat lightZeroColor[4]    = {0.5f, 0.5f, 0.5f, 0.1f}; 
  313. GLfloat lightOneColor[4]     = {0.5f, 0.5f, 0.5f, 0.1f}; 
  314.  
  315. GLfloat lightZeroColor_Car[4]    = {1.0f, 1.0f, 1.0f, 1.0f}; 
  316. GLfloat lightOneColor_Car[4]     = {1.0f, 1.0f, 1.0f, 1.0f}; 
  317.  
  318. // strings strings -----------------------------------------------------------------strings
  319. char string1[40]; // Z Blue.
  320. char string2[40]; // Y Green.
  321. char string3[40]; // X RED.
  322. char string4[]="Stereo_zoom";
  323. char string5[]="Zoom";
  324. char string6[]="Animation";
  325. char string7[]="Vert_adj.";
  326. char string8[]="Color.";
  327. char string9[]="Pt_Size";
  328. char string10[] = "Mirror_trXY";
  329. char string11[] = "Mirror_tr Z";
  330. char string12[] = "TopView Com";
  331. char string13[] = "Big Win Com";
  332. char string14[] = "Mirror ROT" ;
  333. char string15[] = "Zoom Y" ;
  334.  
  335. // Variables for the viewport -------------------------------------- Variables for the viewport
  336. struct scr_bar
  337. m1_expand[1], top_expand[1], sb_c3[1];
  338.  
  339. struct rect
  340. stereo_zoom_rect[1],scaling_rect[1],animation_rect[1],vertical_adj_rect[1], color_rect[1], pt_size_rect[1],
  341. mirror_translate_rect[1], mirror_translateZ_rect[1], big_win_comm[1], top_view_comm[1],mirror_rotate_rect[1],
  342. zoom_y_rect[1];
  343.  
  344. // Variables for the elevator------------------------------------- Variables for the elevator
  345. struct rect
  346. up_rect[1], down_rect[1],band_rect[1];
  347. double band; //determins the band width of highlight points.
  348.  
  349. double thresh; // threshhold for window2 (the elevator) (The line).
  350.  
  351. // GLUT Variables ---------------------------------------------- GLUT Variables
  352. int Menu1_id,Menu2_id,Menu3_id;
  353. int X,Y;
  354. int W = 930, H = 350; // Width / Height of the window.
  355. int CDW = 90; // CDW is the Command De Bord Width.
  356. int W2 = 400, H2 = 150;
  357. int TOP_W=924;//200; // It's the Width of the TOP_VIEW_WINDOW
  358. int TOP_H=340; //200; // It's the Height of the TOP_VIEW_WINDOW
  359. int TOP_V_X = CDW; // It's the lower left corner of the TOP_VIEW_WINDOW
  360. int TOP_V_Y= H-TOP_H; // It's the lower left corner of the TOP_VIEW_WINDOW
  361. int vav = 33; // vav  = vertical adjustment value.
  362. int mz[9];
  363. int win; // identifier of the big big windoooooow...
  364.  
  365. GLubyte TEX_BUF[4][TEX_WIDTH][TEX_HEIGHT][3]; //[TEX_WIDTH][TEX_HEIGHT][3];
  366. GLubyte Distortion_buffer           [DistWidth][DistHeight][3];
  367. GLubyte Distortion_buffer_corrected [DistWidth][DistHeight][3];
  368.  
  369. unsigned char *image;
  370. int im_width[1];
  371. int im_height[1];
  372.  
  373. // Variables -------------------------------------------------------------------- Variables
  374. double carre1 = 30;
  375. double carre2 = 0;
  376. double carre3 = 0;
  377. double carre1_trans=0.5;
  378. double carre2_trans=0.5;
  379. double carre3_trans=0.5;
  380. double         lUPt[16][3] = {  1 , 0 , 0 ,
  381.                               0 , 1 , 0 ,
  382.                               0 , 0 , 1 ,
  383.  
  384.                               1  , 0.8, 0.3,
  385.                               0.8,  1 , 0.3,
  386.                               0.8, 0.3, 1,
  387.  
  388.                               1 , 1 , 0 ,
  389.                               1 , 0 , 1 ,
  390.                               0 , 1 , 1 , 
  391.  
  392.                               1  , 0.3, 0.8,
  393.                               0.3,  1 , 0.8,
  394.                               0.3, 0.8, 1,
  395.  
  396.                               0.5 , 0.5 , 1,
  397.                               0.5 ,  1  , 0.5,
  398.                                 1 ,  0.5, 0.5,
  399.  
  400.                                 1 , 1 , 1} ;
  401.  
  402.                               
  403.  
  404.  
  405. // Dummy Variables
  406. int i,iti;
  407. int ii,jj,kk,jj1;
  408. double scalair;
  409. float xx,yy,zz;
  410. float xf,yf,zf;
  411.  
  412. // Variable to calculate the frame rate so that I know my frame rate change depending on the complexity of
  413. // the scene or some other factors such that the hardware acceleration card...
  414. ClassFrameRate FrameRate;
  415.  
  416. float GS = 1; //12.5; // 12. 5 graphics units / meter.
  417. // Vehicle Variables:
  418. float MaxAccel = 4  ; // meters / second.
  419. float MaxDecel = 8  ; // meters / second.
  420. float Friction_coef = 0.08;  // Maximum Speed is = MaxAccel / Friction_coef = 50m/s
  421. float DTime = 0.05;
  422. double car_scale_factor = 1.0;
  423. float HauteurEye = 3.0;
  424. float Masse = 1;
  425. float AccelScalar = 0; // initial acceleration scalar of the eye.
  426. float Speed = 0; // initial velocity of the car.
  427. int   Throttle = 0; // This is the digital 6 bits precision for gaz and break.
  428. float Gazf = 0;
  429.  
  430. int CRISIS  = 0;
  431. // LPDIRECTSOUND * ppDS;  // DirectSound pointer for use with throttle.
  432.  
  433. // float teta; // direction.
  434. struct point vecttt;
  435. struct point Gravity;
  436. struct point Force;
  437. struct point Velocity;
  438. struct point Acceleration;
  439. struct point Friction;
  440. struct point Gaz;
  441. struct point Collision;
  442. double SlowIt=1.0; // Slows the walking, Flying, Driving Rate.
  443.  
  444. // In Draw Vrml new (put here in order to define external variables).
  445. typedef enum { Top_Scene ,n_Transform, n_Shape, n_AccO, n_AccF, n_translation,
  446.        n_children, n_Appearance, n_Material, n_shininess, n_transparency, n_diffuseColor, 
  447.        n_geometry, n_point, n_coordIndex, f_solid, f_colorIndex, f_color, f_texCoordIndex,
  448.        f_TextureCoordinate, f_texCoord, f_Coordinate, f_texture, nothing, n_material,nappearance,f_coord,
  449. n_USE, n_DEF, n_IndexedFaceSet, nccw, n_solid, n_TRUE, n_FALSE,n_CroO, n_CroF, n_appearance,n_ccw,
  450. n_TimeSensor} Node_type;
  451. typedef GLfloat SFFloat;
  452. // typedef __int32 SFInt32 ; //WinUnix
  453. #define SFInt32 int;
  454. #define  SFVec3f struct point 
  455. #define SFNode  struct
  456. #define SFBool bool
  457. typedef struct
  458. {
  459.     SFFloat    *pElements;
  460.     int        NumElements;
  461. } MFFloat;
  462.  
  463. typedef struct
  464. {
  465.     int    *pElements;
  466.     int        num_el;
  467. } MFInt32;
  468. typedef struct Hab_MFVec3f { SFVec3f *pt;
  469.                              int     num_el;
  470. } MFVec3f;
  471.  
  472. typedef struct TypeRotation {    float x;
  473.                                 float y;
  474.                                 float z;
  475.                                 float teta; 
  476. } Type_Rotation;
  477.  
  478. typedef struct Hab_SFColor {    float r;
  479.                                 float g;
  480.                                 float b;
  481. } SFColor;
  482.  
  483. typedef struct Hab_MFColor {SFColor *pt;
  484.                             int     col_el;
  485. } MFColor;
  486.  
  487. typedef struct TypeMaterial {
  488.   /*exposedField*/ SFFloat ambientIntensity;  //0.2         // #á[0,1]
  489.   /*exposedField*/ SFColor diffuseColor;      //0.8 0.8 0.8 #á[0,1]
  490.   /*exposedField*/ SFColor emissiveColor;     //0 0 0       #á[0,1]
  491.   /*exposedField*/ float     shininess;         //0.2         #á[0,1]
  492.   /*exposedField*/ SFColor specularColor;     //0 0 0       #á[0,1]
  493.   /*exposedField*/ SFFloat transparency;      //0           #á[0,1]
  494. } Material;
  495.  
  496. typedef struct TypeTexture {
  497.     unsigned char *image;
  498.     int im_width[1];
  499.     int im_height[1];
  500.     unsigned int tex_name[10];
  501.     char tex_blk[40];
  502. } Type_Texture;
  503.  
  504. typedef struct TypeAppearance { Material material;
  505.                             
  506.                                 //TextrueTransform textureTransform;
  507. } Type_Appearance;
  508.  
  509.                             
  510. typedef struct Hab_Pixel {
  511.     float x,y;
  512. } Pixel;
  513.  
  514.  
  515. typedef struct TypeIndexedFaceSet { 
  516.   /*exposedField*/  MFColor     color;             
  517.   /*eventIn*/       MFInt32     colorIndex;
  518.  
  519.   /*exposedField*/  MFVec3f     coord;             //NULL
  520.   /*eventIn*/       MFInt32     coordIndex;
  521.  
  522.   /*exposedField*/  Pixel       *texCoord;          //NULL
  523.   /*eventIn*/       MFInt32     texCoordIndex;
  524.  
  525.   /*field*/         SFBool      ccw;               //TRUE
  526.   /*field*/         SFBool      solid;             //TRUE
  527.  
  528.                     int         num_el;
  529. } Type_IndexedFaceSet;
  530.  
  531. typedef struct TypeGeometry {
  532.     Type_IndexedFaceSet IndexedFaceSet;
  533. } Type_Geometry;
  534. typedef struct TypeShape {
  535.     //Type_Transform *FatherTransform;
  536.     Type_Appearance Appearance;
  537.     Type_Texture    Texture;
  538.     Type_Geometry   Geometry;
  539.     int Acc;
  540.     int Cro;
  541.     int Id;
  542. } Type_Shape;
  543.  
  544. typedef struct TypeTransform { 
  545.  
  546.     SFVec3f translation;
  547.     Type_Rotation rotation;
  548.  
  549.     struct TypeTransform *FatherTransform;
  550.  
  551.     struct TypeTransform **ChildrenTransform;
  552.     int    numChildTrans; // this is the total number of sons.
  553.     int    indChildTrans; // this is the actual indice of sons.
  554.  
  555.     Type_Shape     **ChildrenShape;
  556.     int    numChildShape; // this is the total number of sons.
  557.     int    indChildShape; // this is the actual indice of sons.
  558.     int    FlagChildren;
  559.  
  560.     Type_Shape      *Shape;
  561.     int ShapeLeave;      // To say if This node has a Shape Leave or not.
  562.  
  563.     Node_type node_type;
  564.     int Acc;
  565.     int Cro;
  566.                 } Type_Transform;
  567.  
  568. extern Type_Transform *CNV, *CNC, *CNSe, *CNVo[6][6], *CNSphere;
  569.  
  570. double axisup[3] ;
  571.  
  572. // Other cars moving.
  573. FLAG RECORD_CAR_MVMT; // Flag saying wether we are recording or not.
  574. struct car_location *CarLocationRec[10]; // Used to record the Car Location
  575. int IndexCarLocRec[10]; // Used to Index the Car Location when Recording it.
  576. int CarLocAllocated[10];    // How many are currently allocated.
  577. int MaxIndexCarLocRec[10]; // The maximum number of steps for the car.
  578. char RouteNum[10]; // if RouteNum[i] ==1 => car i is running in the environment.
  579. int  RecRouteNum; // The RecRouteNum is the Route Number that is being Recorde.
  580.                   // If RecRouteNum == 999 => we are not recording any route...
  581. struct point sensors_V[8], sensors_W[8];
  582.