/* $Id: tank.c,v 1.11 1996/02/15 14:08:37 if540-37 Exp if540-37 $ */ /* * (C) COPYRIGHT Vincent S. Cojot and others 1996-1997 * All Rights Reserved * Licensed Materials - Property of Vincent S. Cojot and others. * Use, duplication or disclosure restricted by Vincent S. Cojot. */ #include #include #include #include #include #include #ifdef USING_MESA #include #else #include #endif #include "defines.h" #include "lists.h" /* ------------------------------------------------*/ /* Initialisation des listes compilees d'objets */ /* ------------------------------------------------*/ GLvoid initialize_lists (GLvoid) { int i, j; extern int floorSize; float x1i, x1j, x2i, x2j, yi, yj; float Irl = 1.0, Igl = 1.0, Ibl = 1.0; float Radius = 0.125; float k1, k2; float Iro, Igo, Ibo; float Ir, Ig, Ib; float Ir_moy, Ig_moy, Ib_moy; float prod; /* definitions des dimensions du tank */ float hull_length = 6.0, hull_width = 4.0; float bridge_length = 2.0, bridge_width = 2.0; float gun2_width = 0.105, gun_width = 0.1; float gun_length = 3.5, gun_angle = 5.0; float col_clear = 1.1, col_bright = 1.0, col_light = 0.9; float col_dark = 0.8, col_darker = 0.7; /* definitions des parametres du Panneau de Controle. */ float left_side = 0.05; float right_side = 0.45; float panel_bottom = 0.05; float panel_top = 0.40; float panel_border = 0.020; float control_border = 0.035; float VDARKER = 0.35, DARKER = 0.55, LIGHTER = 0.75, VLIGHTER = 0.95; float radar_left = left_side + 4*panel_border; float radar_right = right_side - 4*panel_border; float radar_top = panel_top - (4.5*panel_border+control_border); float radar_bottom = panel_bottom + 3*panel_border; /* ------------------------------------------------*/ /* Liste regroupant tous les vertex d'une petite croix.*/ /* ------------------------------------------------*/ glNewList (RADAR_ITEM, GL_COMPILE); glBegin(GL_LINES); glVertex3f ( 0.005, 0.0, 0.0); glVertex3f (-0.005, 0.0, 0.0); glVertex3f ( 0.0, 0.005, 0.0); glVertex3f ( 0.0, -0.005, 0.0); glEnd(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant tous les vertex d'une petite fleche pour notre tank.*/ /* ------------------------------------------------*/ glNewList (RADAR_ITEM_MY_TANK, GL_COMPILE); glBegin(GL_LINES); glVertex3f ( 0.005, 0.0015, 0.0); glVertex3f ( 0.0, -0.0075, 0.0); glVertex3f ( 0.0, -0.0075, 0.0); glVertex3f (-0.005, 0.0015, 0.0); glEnd(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant tous les vertex du Control Panel */ /* ------------------------------------------------*/ glNewList (CONTROL_PANEL, GL_COMPILE); glBegin(GL_QUADS); /* Cadre exterieur 1.*/ glColor3f(VLIGHTER, VLIGHTER, VLIGHTER); glVertex3f (left_side, panel_bottom, -0.5); glColor3f(LIGHTER, LIGHTER, LIGHTER); glVertex3f (right_side, panel_bottom, -0.5); glColor3f(DARKER, DARKER, DARKER); glVertex3f (right_side, panel_top, -0.5); glColor3f(VDARKER, VDARKER, VDARKER); glVertex3f (left_side, panel_top, -0.5); /* Cadre interieur 1.*/ glColor3f(VDARKER, VDARKER, VDARKER); glVertex3f (left_side+panel_border, panel_bottom+panel_border, -0.5); glColor3f(DARKER, DARKER, DARKER); glVertex3f (right_side-panel_border, panel_bottom+panel_border, -0.5); glColor3f(LIGHTER, LIGHTER, LIGHTER); glVertex3f (right_side-panel_border, panel_top-panel_border, -0.5); glColor3f(VLIGHTER, VLIGHTER, VLIGHTER); glVertex3f (left_side+panel_border, panel_top-panel_border, -0.5); /* Background du Radar.*/ glColor3f(VLIGHTER, VLIGHTER, VLIGHTER); glVertex3f (radar_left-panel_border, radar_bottom-panel_border, -0.5); glColor3f(LIGHTER, LIGHTER, LIGHTER); glVertex3f (radar_right+panel_border, radar_bottom-panel_border, -0.5); glColor3f(DARKER, DARKER, DARKER); glVertex3f (radar_right+panel_border, radar_top+panel_border, -0.5); glColor3f(VDARKER, VDARKER, VDARKER); glVertex3f (radar_left-panel_border, radar_top+panel_border, -0.5); /* Controle Numero 1.*/ glColor3f(VLIGHTER, VLIGHTER, VLIGHTER); glVertex3f (left_side+4*panel_border, panel_top-(3*panel_border+control_border), -0.5); glColor3f(LIGHTER, LIGHTER, LIGHTER); glVertex3f (right_side-4*panel_border, panel_top-(3*panel_border+control_border), -0.5); glColor3f(DARKER, DARKER, DARKER); glVertex3f (right_side-4*panel_border, panel_top-2*panel_border, -0.5); glColor3f(VDARKER, VDARKER, VDARKER); glVertex3f (left_side+4*panel_border, panel_top-2*panel_border, -0.5); glEnd(); left_side = 0.65; right_side = 0.95; glBegin(GL_QUADS); /* Cadre exterieur 2.*/ glColor3f(VLIGHTER, VLIGHTER, VLIGHTER); glVertex3f (left_side, panel_bottom, -0.5); glColor3f(LIGHTER, LIGHTER, LIGHTER); glVertex3f (right_side, panel_bottom, -0.5); glColor3f(DARKER, DARKER, DARKER); glVertex3f (right_side, panel_top, -0.5); glColor3f(VDARKER, VDARKER, VDARKER); glVertex3f (left_side, panel_top, -0.5); /* Cadre interieur 2.*/ glColor3f(VDARKER, VDARKER, VDARKER); glVertex3f (left_side+panel_border, panel_bottom+panel_border, -0.5); glColor3f(DARKER, DARKER, DARKER); glVertex3f (right_side-panel_border, panel_bottom+panel_border, -0.5); glColor3f(LIGHTER, LIGHTER, LIGHTER); glVertex3f (right_side-panel_border, panel_top-panel_border, -0.5); glColor3f(VLIGHTER, VLIGHTER, VLIGHTER); glVertex3f (left_side+panel_border, panel_top-panel_border, -0.5); /* Controle Numero 2.*/ glColor3f(VLIGHTER, VLIGHTER, VLIGHTER); glVertex3f (left_side+2*panel_border, panel_bottom+3*panel_border, -0.5); glColor3f(LIGHTER, LIGHTER, LIGHTER); glVertex3f (left_side+2*panel_border+control_border, panel_bottom+3*panel_border, -0.5); glColor3f(DARKER, DARKER, DARKER); glVertex3f (left_side+2*panel_border+control_border, panel_top-3*panel_border, -0.5); glColor3f(VDARKER, VDARKER, VDARKER); glVertex3f (left_side+2*panel_border, panel_top-3*panel_border, -0.5); /* Controle Numero 3.*/ glColor3f(VLIGHTER, VLIGHTER, VLIGHTER); glVertex3f (left_side+5*panel_border, panel_bottom+3*panel_border, -0.5); glColor3f(LIGHTER, LIGHTER, LIGHTER); glVertex3f (left_side+5*panel_border+control_border, panel_bottom+3*panel_border, -0.5); glColor3f(DARKER, DARKER, DARKER); glVertex3f (left_side+5*panel_border+control_border, panel_top-3*panel_border, -0.5); glColor3f(VDARKER, VDARKER, VDARKER); glVertex3f (left_side+5*panel_border, panel_top-3*panel_border, -0.5); glEnd(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant d'autres vertex du Control Panel/Radar*/ /* ------------------------------------------------*/ glNewList (CONTROL_PANEL_RADAR, GL_COMPILE); glPushMatrix(); glBegin(GL_QUADS); radar_left -= panel_border/2; radar_right += panel_border/2; radar_top += panel_border/2; radar_bottom -= panel_border/2; glColor3f(0.1, 0.1, 0.1); glVertex3f (radar_left ,radar_bottom, -0.5); glVertex3f (radar_right,radar_bottom, -0.5); glVertex3f (radar_right,radar_top, -0.5); glVertex3f (radar_left ,radar_top, -0.5); glEnd(); RadarX = (radar_left + radar_right)/2.0; RadarY = (radar_top + radar_bottom)/2.0; RadarDiffX = radar_right - radar_left; RadarDiffY = radar_top - radar_bottom; for (i=0;i<7;i++) { for (j=0;j<7;j++) { glPushMatrix(); glColor3f(0.15, 0.95, 0.15); glTranslatef( RadarX-((3-i)*RadarDiffX/8) , RadarY-((3-j)*RadarDiffY/8) , 0.0); glCallList(RADAR_ITEM); glPopMatrix(); } } glPopMatrix(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant tous les vertex immobiles du Head-Up-Display */ /* ------------------------------------------------*/ glNewList (ALL_MY_STATIC_HEAD_UP, GL_COMPILE); glPushMatrix(); glBegin(GL_LINES); glColor3f(0.45, 0.45, 0.45); /* Lignes pour le controle 1.*/ glVertex2f( 0.14, 0.33); /* large Lines */ glVertex2f( 0.36, 0.33); /* large Lines */ glVertex2f( 0.14, 0.34); glVertex2f( 0.14, 0.32); glVertex2f( 0.36, 0.34); glVertex2f( 0.36, 0.32); /* Lignes pour le controle 2.*/ glVertex2f( 0.7075, 0.12); /* large Lines */ glVertex2f( 0.7075, 0.32); /* large Lines */ glVertex2f( 0.6975, 0.12); glVertex2f( 0.7175, 0.12); glVertex2f( 0.6975, 0.32); glVertex2f( 0.7175, 0.32); /* Lignes pour le controle 3.*/ glVertex2f( 0.7675, 0.12); /* large Lines */ glVertex2f( 0.7675, 0.32); /* large Lines */ glVertex2f( 0.7575, 0.12); glVertex2f( 0.7775, 0.12); glVertex2f( 0.7575, 0.32); glVertex2f( 0.7775, 0.32); glColor3f(0.15, 0.95, 0.15); /* Le cercle du viseur. */ for (i=0; i<90; i++) { glVertex2f( 0.50 + Radius * cos(i * PI / 45) , 0.50 + Radius * sin(i * PI / 45) ); glVertex2f( 0.50 + Radius * cos( (i+1) * PI / 45) , 0.50 + Radius * sin( (i+1) * PI / 45) ); } /* Les axes du cercle du viseur. */ glVertex2f( 0.50 + Radius, 0.50 + Radius); glVertex2f( 0.50 + Radius/2, 0.50 + Radius/2); glVertex2f( 0.50 - Radius, 0.50 + Radius); glVertex2f( 0.50 - Radius/2, 0.50 + Radius/2); glVertex2f( 0.50 + Radius, 0.50 - Radius); glVertex2f( 0.50 + Radius/2, 0.50 - Radius/2); glVertex2f( 0.50 - Radius, 0.50 - Radius); glVertex2f( 0.50 - Radius/2, 0.50 - Radius/2); glEnd(); glPopMatrix(); glEndList(); Show_init_progress(); /* Definitions des parametres K1 et K2 */ k1 = 0.65; k2 = 1 - k1; /* Blue Violet */ Iro = 0.541; Igo = 0.169; Ibo = 0.886; /* ------------------------------------------------*/ /* Liste regroupant tous les vertex d'un prisme solide. */ /* ------------------------------------------------*/ glNewList (MY_SOLID_PRISM, GL_COMPILE); glBegin(GL_QUADS); glPushAttrib(GL_COLOR_BUFFER_BIT); for (i=1;i<9;i++) { /* Calcul des points du prisme */ x1i = 0.5 * cos ( (i-1) * PI/4 ); x1j = 0.5 * sin ( (i-1) * PI/4); x2i = 0.5 * cos ( i * PI/4 ); x2j = 0.5 * sin ( i * PI/4 ); /* Calcul de la normale a la surface */ Normale1 (x1i, x1j, x2i, x2j, &yi, &yj); /* Calcul du produit scalaire */ prod = ProduitScalaire (yi, yj, 5000.0, 7500.0); prod = (prod + 1) / 2; /* Calcul des indices de couleur */ Ir = k1 * Iro + k2 * prod * Irl; Ig = k1 * Igo + k2 * prod * Igl; Ib = k1 * Ibo + k2 * prod * Ibl; glColor3f (Ir, Ig, Ib); /* Affichage de la surface */ glVertex3f (x1i, -0.5, x1j); glVertex3f (x1i, 0.5, x1j); glVertex3f (x2i, 0.5, x2j); glVertex3f (x2i, -0.5, x2j); /* Affichage de la surface du dessus*/ glVertex3f (x1i, 0.5, x1j); glVertex3f (0, 0.5, 0); glVertex3f (0, 0.5, 0); glVertex3f (x2i, 0.5, x2j); } glPopAttrib(); glEnd(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant tous les vertex d'un prisme en WireFrame. */ /* ------------------------------------------------*/ glNewList (MY_WIRE_PRISM, GL_COMPILE); glBegin(GL_LINE_LOOP); glPushAttrib(GL_COLOR_BUFFER_BIT); for (i=1;i<9;i++) { /* Calcul des points du prisme */ x1i = 0.5 * cos ( (i-1) * PI/4 ); x1j = 0.5 * sin ( (i-1) * PI/4); x2i = 0.5 * cos ( i * PI/4 ); x2j = 0.5 * sin ( i * PI/4 ); /* Calcul de la normale */ Normale1 (x1i, x1j, x2i, x2j, &yi, &yj); /* Calcul du produit scalaire */ prod = ProduitScalaire (yi, yj, 5000.0, 3000.0); prod = (prod + 1) / 2; /* Calcul des indices de couleur */ Ir = k1 * Iro + k2 * prod * Irl; Ig = k1 * Igo + k2 * prod * Igl; Ib = k1 * Ibo + k2 * prod * Ibl; glColor3f (Ir, Ig, Ib); /* Affichage des lignes */ glVertex3f (x1i, -0.5, x1j); glVertex3f (x1i, 0.5, x1j); glVertex3f (x2i, 0.5, x2j); glVertex3f (x2i, -0.5, x2j); } glPopAttrib(); glEnd(); glEndList(); Show_init_progress(); /* Definitions des parametres K1 et K2 */ k1 = 0.50; k2 = 1 - k1; /* Blue */ Iro = 0.1; Igo = 0.7; Ibo = 0.9; /* ------------------------------------------------*/ /* Liste regroupant tous les vertex d'un cube solide. */ /* ------------------------------------------------*/ glNewList(MY_SOLID_CUBE, GL_COMPILE); glBegin(GL_QUADS); glPushAttrib(GL_COLOR_BUFFER_BIT); /* Coordonnees des points d'une face du cube */ x1i = 0.5; x1j = -0.5; x2i = 0.5; x2j = 0.5; Ir_moy = 0.0; Ig_moy = 0.0; Ib_moy = 0.0; /* Calcul de la normale a la surface */ Normale1 (x1i, x1j, x2i, x2j, &yi, &yj); prod = ProduitScalaire (yi, yj, 5000.0, 2500.0); prod = (prod + 1) / 2; /* Calcul des indices de couleur */ Ir = k1 * Iro + k2 * prod * Irl; Ig = k1 * Igo + k2 * prod * Igl; Ib = k1 * Ibo + k2 * prod * Ibl; Ir_moy += Ir/4; Ig_moy += Ig/4; Ib_moy += Ib/4; glColor3f (Ir, Ig, Ib); /* Affichage de la surface */ glVertex3f (x1i, -0.5, x1j); glVertex3f (x1i, 0.5, x1j); glVertex3f (x2i, 0.5, x2j); glVertex3f (x2i, -0.5, x2j); /* Coordonnees des points d'une face du cube */ x1i = 0.5; x1j = 0.5; x2i = -0.5; x2j = 0.5; /* Calcul de la normale a la surface */ Normale1 (x1i, x1j, x2i, x2j, &yi, &yj); prod = ProduitScalaire (yi, yj, 5000.0, 2500.0); prod = (prod + 1) / 2; /* Calcul des indices de couleur */ Ir = k1 * Iro + k2 * prod * Irl; Ig = k1 * Igo + k2 * prod * Igl; Ib = k1 * Ibo + k2 * prod * Ibl; Ir_moy += Ir/4; Ig_moy += Ig/4; Ib_moy += Ib/4; glColor3f (Ir, Ig, Ib); /* Affichage de la surface */ glVertex3f (x1i, -0.5, x1j); glVertex3f (x1i, 0.5, x1j); glVertex3f (x2i, 0.5, x2j); glVertex3f (x2i, -0.5, x2j); /* Coordonnees des points d'une face du cube */ x1i = -0.5; x1j = 0.5; x2i = -0.5; x2j = -0.5; /* Calcul de la normale a la surface */ Normale1 (x1i, x1j, x2i, x2j, &yi, &yj); prod = ProduitScalaire (yi, yj, 5000.0, 2500.0); prod = (prod + 1) / 2; /* Calcul des indices de couleur */ Ir = k1 * Iro + k2 * prod * Irl; Ig = k1 * Igo + k2 * prod * Igl; Ib = k1 * Ibo + k2 * prod * Ibl; Ir_moy += Ir/4; Ig_moy += Ig/4; Ib_moy += Ib/4; glColor3f (Ir, Ig, Ib); /* Affichage de la surface */ glVertex3f (x1i, -0.5, x1j); glVertex3f (x1i, 0.5, x1j); glVertex3f (x2i, 0.5, x2j); glVertex3f (x2i, -0.5, x2j); /* Coordonnees des points d'une face du cube */ x1i = -0.5; x1j = -0.5; x2i = 0.5; x2j = -0.5; /* Calcul de la normale a la surface */ Normale1 (x1i, x1j, x2i, x2j, &yi, &yj); prod = ProduitScalaire (yi, yj, 5000.0, 2500.0); prod = (prod + 1) / 2; /* Calcul des indices de couleur */ Ir = k1 * Iro + k2 * prod * Irl; Ig = k1 * Igo + k2 * prod * Igl; Ib = k1 * Ibo + k2 * prod * Ibl; Ir_moy += Ir/4; Ig_moy += Ig/4; Ib_moy += Ib/4; glColor3f (Ir, Ig, Ib); /* Affichage de la surface */ glVertex3f (x1i, -0.5, x1j); glVertex3f (x1i, 0.5, x1j); glVertex3f (x2i, 0.5, x2j); glVertex3f (x2i, -0.5, x2j); glColor3f (Ir_moy, Ig_moy, Ib_moy); /* Coordonnees des points d'une face du cube */ x1i = 0.5; x1j = 0.5; x2i = 0.5; x2j = 0.5; /* Affichage de la surface du dessus de cube*/ glVertex3f (-x1i, 0.5, -x1j); glVertex3f (-x1i, 0.5, x1j); glVertex3f (x2i, 0.5, x2j); glVertex3f (x2i, 0.5, -x2j); glPopAttrib(); glEnd(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant tous les vertex d'un cube WireFrame. */ /* ------------------------------------------------*/ glNewList(MY_WIRE_CUBE, GL_COMPILE); glBegin(GL_LINE_LOOP); glPushAttrib(GL_COLOR_BUFFER_BIT); /* Coordonnees des points d'une face du cube */ x1i = 0.5; x1j = -0.5; x2i = 0.5; x2j = 0.5; /* Calcul de la normale a la surface */ Normale1 (x1i, x1j, x2i, x2j, &yi, &yj); prod = ProduitScalaire (yi, yj, 5000.0, 2500.0); prod = (prod + 1) / 2; /* Calcul des indices de couleur */ Ir = k1 * Iro + k2 * prod * Irl; Ig = k1 * Igo + k2 * prod * Igl; Ib = k1 * Ibo + k2 * prod * Ibl; glColor3f (Ir, Ig, Ib); /* Affichage de la surface */ glVertex3f (x1i, -0.5, x1j); glVertex3f (x1i, 0.5, x1j); glVertex3f (x2i, 0.5, x2j); glVertex3f (x2i, -0.5, x2j); /* Coordonnees des points d'une face du cube */ x1i = 0.5; x1j = 0.5; x2i = -0.5; x2j = 0.5; /* Calcul de la normale a la surface */ Normale1 (x1i, x1j, x2i, x2j, &yi, &yj); prod = ProduitScalaire (yi, yj, 5000.0, 2500.0); prod = (prod + 1) / 2; /* Calcul des indices de couleur */ Ir = k1 * Iro + k2 * prod * Irl; Ig = k1 * Igo + k2 * prod * Igl; Ib = k1 * Ibo + k2 * prod * Ibl; glColor3f (Ir, Ig, Ib); /* Affichage de la surface */ glVertex3f (x1i, -0.5, x1j); glVertex3f (x1i, 0.5, x1j); glVertex3f (x2i, 0.5, x2j); glVertex3f (x2i, -0.5, x2j); /* Coordonnees des points d'une face du cube */ x1i = -0.5; x1j = 0.5; x2i = -0.5; x2j = -0.5; /* Calcul de la normale a la surface */ Normale1 (x1i, x1j, x2i, x2j, &yi, &yj); prod = ProduitScalaire (yi, yj, 5000.0, 2500.0); prod = (prod + 1) / 2; /* Calcul des indices de couleur */ Ir = k1 * Iro + k2 * prod * Irl; Ig = k1 * Igo + k2 * prod * Igl; Ib = k1 * Ibo + k2 * prod * Ibl; glColor3f (Ir, Ig, Ib); /* Affichage de la surface */ glVertex3f (x1i, -0.5, x1j); glVertex3f (x1i, 0.5, x1j); glVertex3f (x2i, 0.5, x2j); glVertex3f (x2i, -0.5, x2j); /* Coordonnees des points d'une face du cube */ x1i = -0.5; x1j = -0.5; x2i = 0.5; x2j = -0.5; /* Calcul de la normale a la surface */ Normale1 (x1i, x1j, x2i, x2j, &yi, &yj); prod = ProduitScalaire (yi, yj, 5000.0, 2500.0); prod = (prod + 1) / 2; /* Calcul des indices de couleur */ Ir = k1 * Iro + k2 * prod * Irl; Ig = k1 * Igo + k2 * prod * Igl; Ib = k1 * Ibo + k2 * prod * Ibl; glColor3f (Ir, Ig, Ib); /* Affichage de la surface */ glVertex3f (x1i, -0.5, x1j); glVertex3f (x1i, 0.5, x1j); glVertex3f (x2i, 0.5, x2j); glVertex3f (x2i, -0.5, x2j); glPopAttrib(); glEnd(); glEndList(); Show_init_progress(); /* Definitions des parametres K1 et K2 */ k1 = 0.45; k2 = 1 - k1; /* El-Coyote blue */ Iro = 0.537; Igo = 0.627; Ibo = 1.0; /* ------------------------------------------------*/ /* Liste regroupant tous les vertex du grand Cylindre solide central. */ /* ------------------------------------------------*/ glNewList(MY_SOLID_CYL, GL_COMPILE); glBegin(GL_QUADS); glPushAttrib(GL_COLOR_BUFFER_BIT); for (i=1;i<=CYL_FACES;i++) { /* Calcul des points du cylindre */ x1i = 0.5 * cos ( (i-1) * PI/(CYL_FACES/2)); x1j = 0.5 * sin ( (i-1) * PI/(CYL_FACES/2)); x2i = 0.5 * cos ( i * PI/(CYL_FACES/2)); x2j = 0.5 * sin ( i * PI/(CYL_FACES/2)); /* Calcul de la normale */ Normale1 (x1i, x1j, x1i, x1j, &yi, &yj); /* Calcul du produit scalaire */ prod = ProduitScalaire (yi, yj, 5000.0, 2500.0); prod = (prod + 1) / 2; /* Calcul des indices de couleur */ Ir = k1 * Iro + k2 * prod * Irl; Ig = k1 * Igo + k2 * prod * Igl; Ib = k1 * Ibo + k2 * prod * Ibl; /* Affichage d'un vecteur */ glColor3f (2*Ir, Ig/2, Ib/2); glVertex3f (x1i, -0.5, x1j ); glColor3f (Ir/2, Ig, Ib); glVertex3f (x1i, 0.5, x1j ); /* Calcul de la normale */ Normale1 (x2i, x2j, x2i, x2j, &yi, &yj); /* Calcul du produit scalaire */ prod = ProduitScalaire (yi, yj, 5000.0, 2500.0); prod = (prod + 1) / 2; /* Calcul des indices de couleur */ Ir = k1 * Iro + k2 * prod * Irl; Ig = k1 * Igo + k2 * prod * Igl; Ib = k1 * Ibo + k2 * prod * Ibl; /* Affichage d'un vecteur */ glColor3f (Ir/2, Ig, Ib); glVertex3f (x2i, 0.5, x2j ); glColor3f (2*Ir, Ig/2, Ib/2); glVertex3f (x2i, -0.5, x2j ); /* Affichage de la surface du dessus*/ glColor3f (Ir/2, Ig, Ib); glVertex3f (x1i, 0.5, x1j); glVertex3f (0, 0.5, 0); glVertex3f (0, 0.5, 0); glVertex3f (x2i, 0.5, x2j); } glPopAttrib(); glEnd(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant tous les vertex du grand Cylindre WireFrame central. */ /* ------------------------------------------------*/ glNewList(MY_WIRE_CYL, GL_COMPILE); glBegin(GL_LINE_LOOP); glPushAttrib(GL_COLOR_BUFFER_BIT); for (i=1;i<=CYL_FACES;i++) { /* Calcul des points du cylindre */ x1i = 0.5 * cos ( (i-1) * PI/(CYL_FACES/2)); x1j = 0.5 * sin ( (i-1) * PI/(CYL_FACES/2)); x2i = 0.5 * cos ( i * PI/(CYL_FACES/2)); x2j = 0.5 * sin ( i * PI/(CYL_FACES/2)); /* Calcul de la normale */ Normale1 (x1i, x1j, x1i, x1j, &yi, &yj); /* Calcul du produit scalaire */ prod = ProduitScalaire (yi, yj, 5000.0, 2500.0); prod = (prod + 1) / 2; /* Calcul des indices de couleur */ Ir = k1 * Iro + k2 * prod * Irl; Ig = k1 * Igo + k2 * prod * Igl; Ib = k1 * Ibo + k2 * prod * Ibl; glColor3f (Ir, Ig, Ib); /* Affichage d'un vecteur */ glVertex3f (x1i, -0.5, x1j ); glVertex3f (x1i, 0.5, x1j ); /* Calcul de la normale */ Normale1 (x2i, x2j, x2i, x2j, &yi, &yj); /* Calcul du produit scalaire */ prod = ProduitScalaire (yi, yj, 5000.0, 2500.0); prod = (prod + 1) / 2; /* Calcul des indices de couleur */ Ir = k1 * Iro + k2 * prod * Irl; Ig = k1 * Igo + k2 * prod * Igl; Ib = k1 * Ibo + k2 * prod * Ibl; glColor3f (Ir, Ig, Ib); /* Affichage d'un vecteur */ glVertex3f (x2i, 0.5, x2j ); glVertex3f (x2i, -0.5, x2j ); } glPopAttrib(); glEnd(); glEndList(); Show_init_progress(); /* Definitions des parametres K1 et K2 */ k1 = 0.50; k2 = 1 - k1; /* ------------------------------------------------*/ /* Liste regroupant tous les vertex du Tank en mode Solide. */ /* ------------------------------------------------*/ /* Camouflage Green */ Iro = 0.5; Igo = 0.6; Ibo = 0.5; glNewList (ALL_MY_SOLID_TANK, GL_COMPILE); glBegin(GL_QUADS); glPushAttrib(GL_COLOR_BUFFER_BIT); /********************/ /* Bas de caisse du tank */ /********************/ glColor3f (Iro*col_darker, Igo*col_darker, Ibo*col_darker); /* Face arriere du bas de caisse */ glVertex3f ( -hull_width/2 , 0.0, -hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2 , 0.0, -hull_length/2); /* Face gauche du bas de caisse */ glVertex3f ( hull_width/2 , 0.0, -hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( hull_width/2 , 0.0, hull_length/2); /* Face avant du bas de caisse */ glVertex3f ( hull_width/2 , 0.0, hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2 , 0.0, hull_length/2); /* Face droite du bas de caisse */ glVertex3f ( -hull_width/2 , 0.0, hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( -hull_width/2 , 0.0, -hull_length/2); glColor3f (Iro*col_light, Igo*col_light, Ibo*col_light); /* Face arriere du haut de caisse */ glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( -hull_width/2 , 1.0, -hull_length/2); glVertex3f ( hull_width/2 , 1.0, -hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); /* Face gauche du haut de caisse */ glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2 , 1.0, -hull_length/2); glVertex3f ( hull_width/2 , 1.0, hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); /* Face avant du haut de caisse */ glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( hull_width/2 , 1.0, hull_length/2); glVertex3f ( -hull_width/2 , 1.0, hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); /* Face droite du haut de caisse */ glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2 , 1.0, hull_length/2); glVertex3f ( -hull_width/2 , 1.0, -hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glColor3f (Iro*col_bright, Igo*col_bright, Ibo*col_bright); /* dessus de caisse du tank */ glVertex3f ( -hull_width/2 , 1.0, -hull_length/2); glVertex3f ( -hull_width/2 , 1.0, hull_length/2); glVertex3f ( hull_width/2 , 1.0, hull_length/2); glVertex3f ( hull_width/2 , 1.0, -hull_length/2); glPopAttrib(); glEnd(); glBegin(GL_QUADS); glPushAttrib(GL_COLOR_BUFFER_BIT); /********************/ /* tourelle du tank */ /********************/ glColor3f (Iro*col_darker, Igo*col_darker, Ibo*col_darker); /* Face arriere du bas de caisse de la tourelle */ glVertex3f ( -bridge_width/2 , 1.0, -bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2 , 1.0, -bridge_length/2); /* Face gauche du bas de caisse de la tourelle */ glVertex3f ( bridge_width/2 , 1.0, -bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); glVertex3f ( bridge_width/2 , 1.0, bridge_length/2); /* Face avant du bas de caisse de la tourelle */ glVertex3f ( bridge_width/2 , 1.0, bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2 , 1.0, bridge_length/2); /* Face droite du bas de caisse de la tourelle */ glVertex3f ( -bridge_width/2 , 1.0, bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glVertex3f ( -bridge_width/2 , 1.0, -bridge_length/2); glColor3f (Iro*col_light, Igo*col_light, Ibo*col_light); /* Face arriere du haut de caisse de la tourelle */ glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glVertex3f ( -bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); /* Face gauche du haut de caisse de la tourelle */ glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); /* Face avant du haut de caisse de la tourelle */ glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); glVertex3f ( bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( -bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); /* Face droite du haut de caisse de la tourelle */ glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( -bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glColor3f (Iro*col_bright, Igo*col_bright, Ibo*col_bright); /* dessus de caisse de la tourelle */ glVertex3f ( -bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( -bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( bridge_width/2 , 2.1, -bridge_length/2); glPopAttrib(); glEnd(); /* Antenne sur le tank pour faire joli */ glPushAttrib (GL_COLOR_BUFFER_BIT); glColor3f (Iro*col_clear, Igo*col_clear, Ibo*col_clear + 0.2); glBegin (GL_LINES); glVertex3f (-1.5, 1.0, 1.0); glVertex3f (-1.5, 3.5, 1.5); glEnd(); glPopAttrib(); glPushMatrix(); glTranslatef(0.0005, 1.5, -0.5); glRotated(gun_angle, 1.0, 0.0, 0.0); glBegin(GL_QUADS); glPushAttrib(GL_COLOR_BUFFER_BIT); /*****************/ /* canon du tank */ /*****************/ glColor3f (Iro*col_dark, Igo*col_dark, Ibo*col_dark); /* Face inferieure droite du canon */ glVertex3f ( gun_width , 0.0 , -gun_length); glVertex3f ( gun_width , 0.0 , 0.0); glVertex3f ( 0.0 , -gun_width , 0.0); glVertex3f ( 0.0 , -gun_width , -gun_length); /* Face inferieure gauche du canon */ glVertex3f ( -gun_width , 0.0 , 0.0); glVertex3f ( -gun_width , 0.0 , -gun_length); glVertex3f ( 0.0 , -gun_width , -gun_length); glVertex3f ( 0.0 , -gun_width , 0.0); /* Face superieure droite du canon */ glColor3f (Iro*col_clear, Igo*col_clear, Ibo*col_clear); glVertex3f ( 0.0 , gun_width , -gun_length); glVertex3f ( 0.0 , gun_width , 0.0); glVertex3f ( gun_width , 0.0 , 0.0); glVertex3f ( gun_width , 0.0 , -gun_length); /* Face superieure gauche du canon */ glVertex3f ( 0.0 , gun_width , 0.0); glVertex3f ( 0.0 , gun_width , -gun_length); glVertex3f ( -gun_width , 0.0 , -gun_length); glVertex3f ( -gun_width , 0.0 , 0.0); /* Orifice du canon */ glColor3f (Iro*col_darker, Igo*col_darker, Ibo*col_darker); glVertex3f ( 0.0 , gun_width , -gun_length); glVertex3f ( gun_width , 0.0 , -gun_length); glVertex3f ( 0.0 , -gun_width , -gun_length); glVertex3f ( -gun_width , 0.0 , -gun_length); glPopAttrib(); glEnd(); glBegin(GL_LINE_LOOP); glPushAttrib(GL_COLOR_BUFFER_BIT); /* Deux Cercle rougeatre sur le canon */ glColor3f (Iro*col_darker*2, Igo*col_darker, Ibo*col_darker); glVertex3f ( 0.0 , gun2_width , -gun_length); glVertex3f ( gun2_width , 0.0 , -gun_length); glVertex3f ( 0.0 , -gun2_width , -gun_length); glVertex3f ( -gun2_width, 0.0 , -gun_length); glPopAttrib(); glEnd(); glBegin(GL_LINE_LOOP); glVertex3f ( 0.0 , gun2_width , -gun_length/2); glVertex3f ( gun2_width , 0.0 , -gun_length/2); glVertex3f ( 0.0 , -gun2_width , -gun_length/2); glVertex3f ( -gun2_width, 0.0 , -gun_length/2); glPopAttrib(); glEnd(); glPopMatrix(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant tous les vertex du Tank en mode Wire. */ /* ------------------------------------------------*/ glNewList (ALL_MY_WIRE_TANK, GL_COMPILE); glBegin(GL_LINE_STRIP); glPushAttrib(GL_COLOR_BUFFER_BIT); /*************************/ /* Bas de caisse du tank */ /*************************/ glColor3f (Iro*col_darker, Igo*col_darker, Ibo*col_darker); /* Face arriere du bas de caisse */ glVertex3f ( -hull_width/2 , 0.0, -hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2 , 0.0, -hull_length/2); glVertex3f ( -hull_width/2 , 0.0, -hull_length/2); /* Face gauche du bas de caisse */ glVertex3f ( hull_width/2 , 0.0, -hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( hull_width/2 , 0.0, hull_length/2); glVertex3f ( hull_width/2 , 0.0, -hull_length/2); /* Face avant du bas de caisse */ glVertex3f ( hull_width/2 , 0.0, hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2 , 0.0, hull_length/2); glVertex3f ( hull_width/2 , 0.0, hull_length/2); /* Face droite du bas de caisse */ glVertex3f ( -hull_width/2 , 0.0, hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( -hull_width/2 , 0.0, -hull_length/2); glVertex3f ( -hull_width/2 , 0.0, hull_length/2); glPopAttrib(); glEnd(); glBegin(GL_LINE_STRIP); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor3f (Iro*col_light, Igo*col_light, Ibo*col_light); /* Face arriere du haut de caisse */ glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( -hull_width/2 , 1.0, -hull_length/2); glVertex3f ( hull_width/2 , 1.0, -hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); /* Face gauche du haut de caisse */ glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2 , 1.0, -hull_length/2); glVertex3f ( hull_width/2 , 1.0, hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); /* Face avant du haut de caisse */ glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( hull_width/2 , 1.0, hull_length/2); glVertex3f ( -hull_width/2 , 1.0, hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); /* Face droite du haut de caisse */ glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2 , 1.0, hull_length/2); glVertex3f ( -hull_width/2 , 1.0, -hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glPopAttrib(); glEnd(); glBegin(GL_LINE_STRIP); glPushAttrib(GL_COLOR_BUFFER_BIT); /********************/ /* tourelle du tank */ /********************/ glColor3f (Iro*col_darker, Igo*col_darker, Ibo*col_darker); /* Face arriere du bas de caisse de la tourelle */ glVertex3f ( -bridge_width/2 , 1.0, -bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2 , 1.0, -bridge_length/2); glVertex3f ( -bridge_width/2 , 1.0, -bridge_length/2); /* Face gauche du bas de caisse de la tourelle */ glVertex3f ( bridge_width/2 , 1.0, -bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); glVertex3f ( bridge_width/2 , 1.0, bridge_length/2); glVertex3f ( bridge_width/2 , 1.0, -bridge_length/2); /* Face avant du bas de caisse de la tourelle */ glVertex3f ( bridge_width/2 , 1.0, bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2 , 1.0, bridge_length/2); glVertex3f ( bridge_width/2 , 1.0, bridge_length/2); /* Face droite du bas de caisse de la tourelle */ glVertex3f ( -bridge_width/2 , 1.0, bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glVertex3f ( -bridge_width/2 , 1.0, -bridge_length/2); glVertex3f ( -bridge_width/2 , 1.0, bridge_length/2); glPopAttrib(); glEnd(); glBegin(GL_LINE_STRIP); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor3f (Iro*col_light, Igo*col_light, Ibo*col_light); /* Face arriere du haut de caisse de la tourelle */ glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glVertex3f ( -bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); /* Face gauche du haut de caisse de la tourelle */ glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); /* Face avant du haut de caisse de la tourelle */ glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); glVertex3f ( bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( -bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); /* Face droite du haut de caisse de la tourelle */ glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( -bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glPopAttrib(); glEnd(); /* Antenne sur le tank pour faire joli */ glPushAttrib (GL_COLOR_BUFFER_BIT); glColor3f (Iro*col_clear, Igo*col_clear, Ibo*col_clear + 0.2); glBegin (GL_LINES); glVertex3f (-1.5, 1.0, 1.0); glVertex3f (-1.5, 3.5, 1.5); glEnd(); glPopAttrib(); glPushMatrix(); glTranslatef(0.0005, 1.5, -0.5); glRotated(gun_angle, 1.0, 0.0, 0.0); glBegin(GL_LINE_STRIP); glPushAttrib(GL_COLOR_BUFFER_BIT); /*****************/ /* canon du tank */ /*****************/ glColor3f (Iro*col_dark, Igo*col_dark, Ibo*col_dark); /* Face inferieure droite du canon */ glVertex3f ( gun_width , 0.0 , -gun_length); glVertex3f ( gun_width , 0.0 , 0.0); glVertex3f ( 0.0 , -gun_width , 0.0); glVertex3f ( 0.0 , -gun_width , -gun_length); glVertex3f ( gun_width , 0.0 , -gun_length); /* Face superieure droite du canon */ glColor3f (Iro*col_clear, Igo*col_clear, Ibo*col_clear); glVertex3f ( 0.0 , gun_width , -gun_length); glVertex3f ( 0.0 , gun_width , 0.0); glVertex3f ( gun_width , 0.0 , 0.0); glVertex3f ( gun_width , 0.0 , -gun_length); glVertex3f ( 0.0 , gun_width , -gun_length); /* Face superieure gauche du canon */ glVertex3f ( 0.0 , gun_width , 0.0); glVertex3f ( 0.0 , gun_width , -gun_length); glVertex3f ( -gun_width , 0.0 , -gun_length); glVertex3f ( -gun_width , 0.0 , 0.0); glVertex3f ( 0.0 , gun_width , 0.0); /* Face inferieure gauche du canon */ glVertex3f ( -gun_width , 0.0 , 0.0); glVertex3f ( -gun_width , 0.0 , -gun_length); glVertex3f ( 0.0 , -gun_width , -gun_length); glVertex3f ( 0.0 , -gun_width , 0.0); glVertex3f ( -gun_width , 0.0 , 0.0); glPopAttrib(); glEnd(); glBegin(GL_LINE_LOOP); glPushAttrib(GL_COLOR_BUFFER_BIT); /* Deux Cercle rougeatre sur le canon */ glColor3f (Iro*col_darker*2, Igo*col_darker, Ibo*col_darker); glVertex3f ( 0.0 , gun2_width , -gun_length); glVertex3f ( gun2_width , 0.0 , -gun_length); glVertex3f ( 0.0 , -gun2_width , -gun_length); glVertex3f ( -gun2_width, 0.0 , -gun_length); glPopAttrib(); glEnd(); glBegin(GL_LINE_LOOP); glVertex3f ( 0.0 , gun2_width , -gun_length/2); glVertex3f ( gun2_width , 0.0 , -gun_length/2); glVertex3f ( 0.0 , -gun2_width , -gun_length/2); glVertex3f ( -gun2_width, 0.0 , -gun_length/2); glPopAttrib(); glEnd(); glPopMatrix(); glEndList(); Show_init_progress(); /* Definitions des parametres K1 et K2 */ k1 = 0.50; k2 = 1 - k1; /* ------------------------------------------------*/ /* Liste regroupant tous les vertex du Tank RED en mode Solide. */ /* ------------------------------------------------*/ /* Camouflage RED */ Iro = 0.8; Igo = 0.2; Ibo = 0.2; glNewList (ALL_MY_RED_SOLID_TANK, GL_COMPILE); glBegin(GL_QUADS); glPushAttrib(GL_COLOR_BUFFER_BIT); /********************/ /* Bas de caisse du tank */ /********************/ glColor3f (Iro*col_darker, Igo*col_darker, Ibo*col_darker); /* Face arriere du bas de caisse */ glVertex3f ( -hull_width/2 , 0.0, -hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2 , 0.0, -hull_length/2); /* Face gauche du bas de caisse */ glVertex3f ( hull_width/2 , 0.0, -hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( hull_width/2 , 0.0, hull_length/2); /* Face avant du bas de caisse */ glVertex3f ( hull_width/2 , 0.0, hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2 , 0.0, hull_length/2); /* Face droite du bas de caisse */ glVertex3f ( -hull_width/2 , 0.0, hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( -hull_width/2 , 0.0, -hull_length/2); glColor3f (Iro*col_light, Igo*col_light, Ibo*col_light); /* Face arriere du haut de caisse */ glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( -hull_width/2 , 1.0, -hull_length/2); glVertex3f ( hull_width/2 , 1.0, -hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); /* Face gauche du haut de caisse */ glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2 , 1.0, -hull_length/2); glVertex3f ( hull_width/2 , 1.0, hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); /* Face avant du haut de caisse */ glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( hull_width/2 , 1.0, hull_length/2); glVertex3f ( -hull_width/2 , 1.0, hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); /* Face droite du haut de caisse */ glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2 , 1.0, hull_length/2); glVertex3f ( -hull_width/2 , 1.0, -hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glColor3f (Iro*col_bright, Igo*col_bright, Ibo*col_bright); /* dessus de caisse du tank */ glVertex3f ( -hull_width/2 , 1.0, -hull_length/2); glVertex3f ( -hull_width/2 , 1.0, hull_length/2); glVertex3f ( hull_width/2 , 1.0, hull_length/2); glVertex3f ( hull_width/2 , 1.0, -hull_length/2); glPopAttrib(); glEnd(); glBegin(GL_QUADS); glPushAttrib(GL_COLOR_BUFFER_BIT); /********************/ /* tourelle du tank */ /********************/ glColor3f (Iro*col_darker, Igo*col_darker, Ibo*col_darker); /* Face arriere du bas de caisse de la tourelle */ glVertex3f ( -bridge_width/2 , 1.0, -bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2 , 1.0, -bridge_length/2); /* Face gauche du bas de caisse de la tourelle */ glVertex3f ( bridge_width/2 , 1.0, -bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); glVertex3f ( bridge_width/2 , 1.0, bridge_length/2); /* Face avant du bas de caisse de la tourelle */ glVertex3f ( bridge_width/2 , 1.0, bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2 , 1.0, bridge_length/2); /* Face droite du bas de caisse de la tourelle */ glVertex3f ( -bridge_width/2 , 1.0, bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glVertex3f ( -bridge_width/2 , 1.0, -bridge_length/2); glColor3f (Iro*col_light, Igo*col_light, Ibo*col_light); /* Face arriere du haut de caisse de la tourelle */ glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glVertex3f ( -bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); /* Face gauche du haut de caisse de la tourelle */ glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); /* Face avant du haut de caisse de la tourelle */ glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); glVertex3f ( bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( -bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); /* Face droite du haut de caisse de la tourelle */ glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( -bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glColor3f (Iro*col_bright, Igo*col_bright, Ibo*col_bright); /* dessus de caisse de la tourelle */ glVertex3f ( -bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( -bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( bridge_width/2 , 2.1, -bridge_length/2); glPopAttrib(); glEnd(); /* Antenne sur le tank pour faire joli */ glPushAttrib (GL_COLOR_BUFFER_BIT); glColor3f (Iro*col_clear, Igo*col_clear, Ibo*col_clear + 0.2); glBegin (GL_LINES); glVertex3f (-1.5, 1.0, 1.0); glVertex3f (-1.5, 3.5, 1.5); glEnd(); glPopAttrib(); glPushMatrix(); glTranslatef(0.0005, 1.5, -0.5); glRotated(gun_angle, 1.0, 0.0, 0.0); glBegin(GL_QUADS); glPushAttrib(GL_COLOR_BUFFER_BIT); /*****************/ /* canon du tank */ /*****************/ glColor3f (Iro*col_dark, Igo*col_dark, Ibo*col_dark); /* Face inferieure droite du canon */ glVertex3f ( gun_width , 0.0 , -gun_length); glVertex3f ( gun_width , 0.0 , 0.0); glVertex3f ( 0.0 , -gun_width , 0.0); glVertex3f ( 0.0 , -gun_width , -gun_length); /* Face inferieure gauche du canon */ glVertex3f ( -gun_width , 0.0 , 0.0); glVertex3f ( -gun_width , 0.0 , -gun_length); glVertex3f ( 0.0 , -gun_width , -gun_length); glVertex3f ( 0.0 , -gun_width , 0.0); /* Face superieure droite du canon */ glColor3f (Iro*col_clear, Igo*col_clear, Ibo*col_clear); glVertex3f ( 0.0 , gun_width , -gun_length); glVertex3f ( 0.0 , gun_width , 0.0); glVertex3f ( gun_width , 0.0 , 0.0); glVertex3f ( gun_width , 0.0 , -gun_length); /* Face superieure gauche du canon */ glVertex3f ( 0.0 , gun_width , 0.0); glVertex3f ( 0.0 , gun_width , -gun_length); glVertex3f ( -gun_width , 0.0 , -gun_length); glVertex3f ( -gun_width , 0.0 , 0.0); /* Orifice du canon */ glColor3f (Iro*col_darker, Igo*col_darker, Ibo*col_darker); glVertex3f ( 0.0 , gun_width , -gun_length); glVertex3f ( gun_width , 0.0 , -gun_length); glVertex3f ( 0.0 , -gun_width , -gun_length); glVertex3f ( -gun_width , 0.0 , -gun_length); glPopAttrib(); glEnd(); glBegin(GL_LINE_LOOP); glPushAttrib(GL_COLOR_BUFFER_BIT); /* Deux Cercle rougeatre sur le canon */ glColor3f (Iro*col_darker*2, Igo*col_darker, Ibo*col_darker); glVertex3f ( 0.0 , gun2_width , -gun_length); glVertex3f ( gun2_width , 0.0 , -gun_length); glVertex3f ( 0.0 , -gun2_width , -gun_length); glVertex3f ( -gun2_width, 0.0 , -gun_length); glPopAttrib(); glEnd(); glBegin(GL_LINE_LOOP); glVertex3f ( 0.0 , gun2_width , -gun_length/2); glVertex3f ( gun2_width , 0.0 , -gun_length/2); glVertex3f ( 0.0 , -gun2_width , -gun_length/2); glVertex3f ( -gun2_width, 0.0 , -gun_length/2); glPopAttrib(); glEnd(); glPopMatrix(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant tous les vertex du Tank RED en mode Wire. */ /* ------------------------------------------------*/ glNewList (ALL_MY_RED_WIRE_TANK, GL_COMPILE); glBegin(GL_LINE_STRIP); glPushAttrib(GL_COLOR_BUFFER_BIT); /*************************/ /* Bas de caisse du tank */ /*************************/ glColor3f (Iro*col_darker, Igo*col_darker, Ibo*col_darker); /* Face arriere du bas de caisse */ glVertex3f ( -hull_width/2 , 0.0, -hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2 , 0.0, -hull_length/2); glVertex3f ( -hull_width/2 , 0.0, -hull_length/2); /* Face gauche du bas de caisse */ glVertex3f ( hull_width/2 , 0.0, -hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( hull_width/2 , 0.0, hull_length/2); glVertex3f ( hull_width/2 , 0.0, -hull_length/2); /* Face avant du bas de caisse */ glVertex3f ( hull_width/2 , 0.0, hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2 , 0.0, hull_length/2); glVertex3f ( hull_width/2 , 0.0, hull_length/2); /* Face droite du bas de caisse */ glVertex3f ( -hull_width/2 , 0.0, hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( -hull_width/2 , 0.0, -hull_length/2); glVertex3f ( -hull_width/2 , 0.0, hull_length/2); glPopAttrib(); glEnd(); glBegin(GL_LINE_STRIP); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor3f (Iro*col_light, Igo*col_light, Ibo*col_light); /* Face arriere du haut de caisse */ glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( -hull_width/2 , 1.0, -hull_length/2); glVertex3f ( hull_width/2 , 1.0, -hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); /* Face gauche du haut de caisse */ glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2 , 1.0, -hull_length/2); glVertex3f ( hull_width/2 , 1.0, hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); /* Face avant du haut de caisse */ glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( hull_width/2 , 1.0, hull_length/2); glVertex3f ( -hull_width/2 , 1.0, hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); /* Face droite du haut de caisse */ glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2 , 1.0, hull_length/2); glVertex3f ( -hull_width/2 , 1.0, -hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glPopAttrib(); glEnd(); glBegin(GL_LINE_STRIP); glPushAttrib(GL_COLOR_BUFFER_BIT); /********************/ /* tourelle du tank */ /********************/ glColor3f (Iro*col_darker, Igo*col_darker, Ibo*col_darker); /* Face arriere du bas de caisse de la tourelle */ glVertex3f ( -bridge_width/2 , 1.0, -bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2 , 1.0, -bridge_length/2); glVertex3f ( -bridge_width/2 , 1.0, -bridge_length/2); /* Face gauche du bas de caisse de la tourelle */ glVertex3f ( bridge_width/2 , 1.0, -bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); glVertex3f ( bridge_width/2 , 1.0, bridge_length/2); glVertex3f ( bridge_width/2 , 1.0, -bridge_length/2); /* Face avant du bas de caisse de la tourelle */ glVertex3f ( bridge_width/2 , 1.0, bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2 , 1.0, bridge_length/2); glVertex3f ( bridge_width/2 , 1.0, bridge_length/2); /* Face droite du bas de caisse de la tourelle */ glVertex3f ( -bridge_width/2 , 1.0, bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glVertex3f ( -bridge_width/2 , 1.0, -bridge_length/2); glVertex3f ( -bridge_width/2 , 1.0, bridge_length/2); glPopAttrib(); glEnd(); glBegin(GL_LINE_STRIP); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor3f (Iro*col_light, Igo*col_light, Ibo*col_light); /* Face arriere du haut de caisse de la tourelle */ glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glVertex3f ( -bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); /* Face gauche du haut de caisse de la tourelle */ glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); /* Face avant du haut de caisse de la tourelle */ glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); glVertex3f ( bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( -bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); /* Face droite du haut de caisse de la tourelle */ glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( -bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glPopAttrib(); glEnd(); /* Antenne sur le tank pour faire joli */ glPushAttrib (GL_COLOR_BUFFER_BIT); glColor3f (Iro*col_clear, Igo*col_clear, Ibo*col_clear + 0.2); glBegin (GL_LINES); glVertex3f (-1.5, 1.0, 1.0); glVertex3f (-1.5, 3.5, 1.5); glEnd(); glPopAttrib(); glPushMatrix(); glTranslatef(0.0005, 1.5, -0.5); glRotated(gun_angle, 1.0, 0.0, 0.0); glBegin(GL_LINE_STRIP); glPushAttrib(GL_COLOR_BUFFER_BIT); /*****************/ /* canon du tank */ /*****************/ glColor3f (Iro*col_dark, Igo*col_dark, Ibo*col_dark); /* Face inferieure droite du canon */ glVertex3f ( gun_width , 0.0 , -gun_length); glVertex3f ( gun_width , 0.0 , 0.0); glVertex3f ( 0.0 , -gun_width , 0.0); glVertex3f ( 0.0 , -gun_width , -gun_length); glVertex3f ( gun_width , 0.0 , -gun_length); /* Face superieure droite du canon */ glColor3f (Iro*col_clear, Igo*col_clear, Ibo*col_clear); glVertex3f ( 0.0 , gun_width , -gun_length); glVertex3f ( 0.0 , gun_width , 0.0); glVertex3f ( gun_width , 0.0 , 0.0); glVertex3f ( gun_width , 0.0 , -gun_length); glVertex3f ( 0.0 , gun_width , -gun_length); /* Face superieure gauche du canon */ glVertex3f ( 0.0 , gun_width , 0.0); glVertex3f ( 0.0 , gun_width , -gun_length); glVertex3f ( -gun_width , 0.0 , -gun_length); glVertex3f ( -gun_width , 0.0 , 0.0); glVertex3f ( 0.0 , gun_width , 0.0); /* Face inferieure gauche du canon */ glVertex3f ( -gun_width , 0.0 , 0.0); glVertex3f ( -gun_width , 0.0 , -gun_length); glVertex3f ( 0.0 , -gun_width , -gun_length); glVertex3f ( 0.0 , -gun_width , 0.0); glVertex3f ( -gun_width , 0.0 , 0.0); glPopAttrib(); glEnd(); glBegin(GL_LINE_LOOP); glPushAttrib(GL_COLOR_BUFFER_BIT); /* Deux Cercle rougeatre sur le canon */ glColor3f (Iro*col_darker*2, Igo*col_darker, Ibo*col_darker); glVertex3f ( 0.0 , gun2_width , -gun_length); glVertex3f ( gun2_width , 0.0 , -gun_length); glVertex3f ( 0.0 , -gun2_width , -gun_length); glVertex3f ( -gun2_width, 0.0 , -gun_length); glPopAttrib(); glEnd(); glBegin(GL_LINE_LOOP); glVertex3f ( 0.0 , gun2_width , -gun_length/2); glVertex3f ( gun2_width , 0.0 , -gun_length/2); glVertex3f ( 0.0 , -gun2_width , -gun_length/2); glVertex3f ( -gun2_width, 0.0 , -gun_length/2); glPopAttrib(); glEnd(); glPopMatrix(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant tous les vertex des restes du Tank RED */ /* apres sa destruction, en mode Solide. */ /* ------------------------------------------------*/ /* Camouflage BLUE (Temporaire) */ Iro = 0.55; Igo = 0.4; Ibo = 0.4; gun_angle = -7.5; glNewList (SOLID_DESTROYED_TANK, GL_COMPILE); glBegin(GL_QUADS); glPushAttrib(GL_COLOR_BUFFER_BIT); /********************/ /* Bas de caisse du tank */ /********************/ glColor3f (Iro*col_darker, Igo*col_darker, Ibo*col_darker); /* Face arriere du bas de caisse */ glVertex3f ( -hull_width/2 , 0.0, -hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2 , 0.0, -hull_length/2); /* Face gauche du bas de caisse */ glVertex3f ( hull_width/2 , 0.0, -hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( hull_width/2 , 0.0, hull_length/2); /* Face avant du bas de caisse */ glVertex3f ( hull_width/2 , 0.0, hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2 , 0.0, hull_length/2); /* Face droite du bas de caisse */ glVertex3f ( -hull_width/2 , 0.0, hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( -hull_width/2 , 0.0, -hull_length/2); glColor3f (Iro*col_light, Igo*col_light, Ibo*col_light); /* Face arriere du haut de caisse */ glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( -hull_width/2 , 1.0, -hull_length/2); glVertex3f ( hull_width/2 , 1.0, -hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); /* Face gauche du haut de caisse */ glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2 , 1.0, -hull_length/2); glVertex3f ( hull_width/2 , 1.0, hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); /* Face avant du haut de caisse */ glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( hull_width/2 , 1.0, hull_length/2); glVertex3f ( -hull_width/2 , 1.0, hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); /* Face droite du haut de caisse */ glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2 , 1.0, hull_length/2); glVertex3f ( -hull_width/2 , 1.0, -hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glColor3f (Iro*col_bright, Igo*col_bright, Ibo*col_bright); /* dessus de caisse du tank */ glVertex3f ( -hull_width/2 , 1.0, -hull_length/2); glVertex3f ( -hull_width/2 , 1.0, hull_length/2); glVertex3f ( hull_width/2 , 1.0, hull_length/2); glVertex3f ( hull_width/2 , 1.0, -hull_length/2); glPopAttrib(); glEnd(); glBegin(GL_QUADS); glPushAttrib(GL_COLOR_BUFFER_BIT); /********************/ /* tourelle du tank */ /********************/ glColor3f (Iro*col_darker, Igo*col_darker, Ibo*col_darker); /* Face arriere du bas de caisse de la tourelle */ glVertex3f ( -bridge_width/2 , 1.0, -bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2 , 1.0, -bridge_length/2); /* Face gauche du bas de caisse de la tourelle */ glVertex3f ( bridge_width/2 , 1.0, -bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); glVertex3f ( bridge_width/2 , 1.0, bridge_length/2); /* Face avant du bas de caisse de la tourelle */ glVertex3f ( bridge_width/2 , 1.0, bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2 , 1.0, bridge_length/2); /* Face droite du bas de caisse de la tourelle */ glVertex3f ( -bridge_width/2 , 1.0, bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glVertex3f ( -bridge_width/2 , 1.0, -bridge_length/2); glColor3f (Iro*col_light, Igo*col_light, Ibo*col_light); /* Face arriere du haut de caisse de la tourelle */ glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glVertex3f ( -bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); /* Face gauche du haut de caisse de la tourelle */ glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); /* Face avant du haut de caisse de la tourelle */ glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); glVertex3f ( bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( -bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); /* Face droite du haut de caisse de la tourelle */ glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( -bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glColor3f (Iro*col_bright, Igo*col_bright, Ibo*col_bright); /* dessus de caisse de la tourelle */ glVertex3f ( -bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( -bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( bridge_width/2 , 2.1, -bridge_length/2); glPopAttrib(); glEnd(); /* Antenne sur le tank pour faire joli */ glPushAttrib (GL_COLOR_BUFFER_BIT); glColor3f (Iro*col_clear, Igo*col_clear, Ibo*col_clear + 0.2); glBegin (GL_LINES); glVertex3f (-1.5, 1.0, 1.0); glVertex3f (-1.5, 3.5, 1.5); glEnd(); glPopAttrib(); glPushMatrix(); glTranslatef(0.0005, 1.5, -0.5); glRotated(gun_angle, 1.0, 0.0, 0.0); glBegin(GL_QUADS); glPushAttrib(GL_COLOR_BUFFER_BIT); /*****************/ /* canon du tank */ /*****************/ glColor3f (Iro*col_dark, Igo*col_dark, Ibo*col_dark); /* Face inferieure droite du canon */ glVertex3f ( gun_width , 0.0 , -gun_length); glVertex3f ( gun_width , 0.0 , 0.0); glVertex3f ( 0.0 , -gun_width , 0.0); glVertex3f ( 0.0 , -gun_width , -gun_length); /* Face inferieure gauche du canon */ glVertex3f ( -gun_width , 0.0 , 0.0); glVertex3f ( -gun_width , 0.0 , -gun_length); glVertex3f ( 0.0 , -gun_width , -gun_length); glVertex3f ( 0.0 , -gun_width , 0.0); /* Face superieure droite du canon */ glColor3f (Iro*col_clear, Igo*col_clear, Ibo*col_clear); glVertex3f ( 0.0 , gun_width , -gun_length); glVertex3f ( 0.0 , gun_width , 0.0); glVertex3f ( gun_width , 0.0 , 0.0); glVertex3f ( gun_width , 0.0 , -gun_length); /* Face superieure gauche du canon */ glVertex3f ( 0.0 , gun_width , 0.0); glVertex3f ( 0.0 , gun_width , -gun_length); glVertex3f ( -gun_width , 0.0 , -gun_length); glVertex3f ( -gun_width , 0.0 , 0.0); /* Orifice du canon */ glColor3f (Iro*col_darker, Igo*col_darker, Ibo*col_darker); glVertex3f ( 0.0 , gun_width , -gun_length); glVertex3f ( gun_width , 0.0 , -gun_length); glVertex3f ( 0.0 , -gun_width , -gun_length); glVertex3f ( -gun_width , 0.0 , -gun_length); glPopAttrib(); glEnd(); glBegin(GL_LINE_LOOP); glPushAttrib(GL_COLOR_BUFFER_BIT); /* Deux Cercle rougeatre sur le canon */ glColor3f (Iro*col_darker*2, Igo*col_darker, Ibo*col_darker); glVertex3f ( 0.0 , gun2_width , -gun_length); glVertex3f ( gun2_width , 0.0 , -gun_length); glVertex3f ( 0.0 , -gun2_width , -gun_length); glVertex3f ( -gun2_width, 0.0 , -gun_length); glPopAttrib(); glEnd(); glBegin(GL_LINE_LOOP); glVertex3f ( 0.0 , gun2_width , -gun_length/2); glVertex3f ( gun2_width , 0.0 , -gun_length/2); glVertex3f ( 0.0 , -gun2_width , -gun_length/2); glVertex3f ( -gun2_width, 0.0 , -gun_length/2); glPopAttrib(); glEnd(); glPopMatrix(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant tous les vertex des restes du Tank RED */ /* apres sa destruction, en mode Wire. */ /* ------------------------------------------------*/ glNewList (WIRE_DESTROYED_TANK, GL_COMPILE); glBegin(GL_LINE_STRIP); glPushAttrib(GL_COLOR_BUFFER_BIT); /*************************/ /* Bas de caisse du tank */ /*************************/ glColor3f (Iro*col_darker, Igo*col_darker, Ibo*col_darker); /* Face arriere du bas de caisse */ glVertex3f ( -hull_width/2 , 0.0, -hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2 , 0.0, -hull_length/2); glVertex3f ( -hull_width/2 , 0.0, -hull_length/2); /* Face gauche du bas de caisse */ glVertex3f ( hull_width/2 , 0.0, -hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( hull_width/2 , 0.0, hull_length/2); glVertex3f ( hull_width/2 , 0.0, -hull_length/2); /* Face avant du bas de caisse */ glVertex3f ( hull_width/2 , 0.0, hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2 , 0.0, hull_length/2); glVertex3f ( hull_width/2 , 0.0, hull_length/2); /* Face droite du bas de caisse */ glVertex3f ( -hull_width/2 , 0.0, hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( -hull_width/2 , 0.0, -hull_length/2); glVertex3f ( -hull_width/2 , 0.0, hull_length/2); glPopAttrib(); glEnd(); glBegin(GL_LINE_STRIP); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor3f (Iro*col_light, Igo*col_light, Ibo*col_light); /* Face arriere du haut de caisse */ glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( -hull_width/2 , 1.0, -hull_length/2); glVertex3f ( hull_width/2 , 1.0, -hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); /* Face gauche du haut de caisse */ glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( hull_width/2 , 1.0, -hull_length/2); glVertex3f ( hull_width/2 , 1.0, hull_length/2); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( hull_width/2+0.1 , 0.8, -hull_length/2-0.1); /* Face avant du haut de caisse */ glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); glVertex3f ( hull_width/2 , 1.0, hull_length/2); glVertex3f ( -hull_width/2 , 1.0, hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( hull_width/2+0.1 , 0.8, hull_length/2+0.1); /* Face droite du haut de caisse */ glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glVertex3f ( -hull_width/2 , 1.0, hull_length/2); glVertex3f ( -hull_width/2 , 1.0, -hull_length/2); glVertex3f ( -hull_width/2-0.1 , 0.8, -hull_length/2-0.1); glVertex3f ( -hull_width/2-0.1 , 0.8, hull_length/2+0.1); glPopAttrib(); glEnd(); glBegin(GL_LINE_STRIP); glPushAttrib(GL_COLOR_BUFFER_BIT); /********************/ /* tourelle du tank */ /********************/ glColor3f (Iro*col_darker, Igo*col_darker, Ibo*col_darker); /* Face arriere du bas de caisse de la tourelle */ glVertex3f ( -bridge_width/2 , 1.0, -bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2 , 1.0, -bridge_length/2); glVertex3f ( -bridge_width/2 , 1.0, -bridge_length/2); /* Face gauche du bas de caisse de la tourelle */ glVertex3f ( bridge_width/2 , 1.0, -bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); glVertex3f ( bridge_width/2 , 1.0, bridge_length/2); glVertex3f ( bridge_width/2 , 1.0, -bridge_length/2); /* Face avant du bas de caisse de la tourelle */ glVertex3f ( bridge_width/2 , 1.0, bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2 , 1.0, bridge_length/2); glVertex3f ( bridge_width/2 , 1.0, bridge_length/2); /* Face droite du bas de caisse de la tourelle */ glVertex3f ( -bridge_width/2 , 1.0, bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glVertex3f ( -bridge_width/2 , 1.0, -bridge_length/2); glVertex3f ( -bridge_width/2 , 1.0, bridge_length/2); glPopAttrib(); glEnd(); glBegin(GL_LINE_STRIP); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor3f (Iro*col_light, Igo*col_light, Ibo*col_light); /* Face arriere du haut de caisse de la tourelle */ glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glVertex3f ( -bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); /* Face gauche du haut de caisse de la tourelle */ glVertex3f ( bridge_width/2+0.3 , 1.3, -bridge_length/2-0.5); glVertex3f ( bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); /* Face avant du haut de caisse de la tourelle */ glVertex3f ( bridge_width/2+0.3 , 1.3, bridge_length/2+0.5); glVertex3f ( bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( -bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); /* Face droite du haut de caisse de la tourelle */ glVertex3f ( -bridge_width/2-0.3, 1.3, bridge_length/2+0.5); glVertex3f ( -bridge_width/2 , 2.1, bridge_length/2); glVertex3f ( -bridge_width/2 , 2.1, -bridge_length/2); glVertex3f ( -bridge_width/2-0.3, 1.3, -bridge_length/2-0.5); glPopAttrib(); glEnd(); /* Antenne sur le tank pour faire joli */ glPushAttrib (GL_COLOR_BUFFER_BIT); glColor3f (Iro*col_clear, Igo*col_clear, Ibo*col_clear + 0.2); glBegin (GL_LINES); glVertex3f (-1.5, 1.0, 1.0); glVertex3f (-1.5, 3.5, 1.5); glEnd(); glPopAttrib(); glPushMatrix(); glTranslatef(0.0005, 1.5, -0.5); glRotated(gun_angle, 1.0, 0.0, 0.0); glBegin(GL_LINE_STRIP); glPushAttrib(GL_COLOR_BUFFER_BIT); /*****************/ /* canon du tank */ /*****************/ glColor3f (Iro*col_dark, Igo*col_dark, Ibo*col_dark); /* Face inferieure droite du canon */ glVertex3f ( gun_width , 0.0 , -gun_length); glVertex3f ( gun_width , 0.0 , 0.0); glVertex3f ( 0.0 , -gun_width , 0.0); glVertex3f ( 0.0 , -gun_width , -gun_length); glVertex3f ( gun_width , 0.0 , -gun_length); /* Face superieure droite du canon */ glColor3f (Iro*col_clear, Igo*col_clear, Ibo*col_clear); glVertex3f ( 0.0 , gun_width , -gun_length); glVertex3f ( 0.0 , gun_width , 0.0); glVertex3f ( gun_width , 0.0 , 0.0); glVertex3f ( gun_width , 0.0 , -gun_length); glVertex3f ( 0.0 , gun_width , -gun_length); /* Face superieure gauche du canon */ glVertex3f ( 0.0 , gun_width , 0.0); glVertex3f ( 0.0 , gun_width , -gun_length); glVertex3f ( -gun_width , 0.0 , -gun_length); glVertex3f ( -gun_width , 0.0 , 0.0); glVertex3f ( 0.0 , gun_width , 0.0); /* Face inferieure gauche du canon */ glVertex3f ( -gun_width , 0.0 , 0.0); glVertex3f ( -gun_width , 0.0 , -gun_length); glVertex3f ( 0.0 , -gun_width , -gun_length); glVertex3f ( 0.0 , -gun_width , 0.0); glVertex3f ( -gun_width , 0.0 , 0.0); glPopAttrib(); glEnd(); glBegin(GL_LINE_LOOP); glPushAttrib(GL_COLOR_BUFFER_BIT); /* Deux Cercle rougeatre sur le canon */ glColor3f (Iro*col_darker*2, Igo*col_darker, Ibo*col_darker); glVertex3f ( 0.0 , gun2_width , -gun_length); glVertex3f ( gun2_width , 0.0 , -gun_length); glVertex3f ( 0.0 , -gun2_width , -gun_length); glVertex3f ( -gun2_width, 0.0 , -gun_length); glPopAttrib(); glEnd(); glBegin(GL_LINE_LOOP); glVertex3f ( 0.0 , gun2_width , -gun_length/2); glVertex3f ( gun2_width , 0.0 , -gun_length/2); glVertex3f ( 0.0 , -gun2_width , -gun_length/2); glVertex3f ( -gun2_width, 0.0 , -gun_length/2); glPopAttrib(); glEnd(); glPopMatrix(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant toutes les lignes tracees sur le sol. */ /* ------------------------------------------------*/ glNewList(MY_LINES, GL_COMPILE); glDisable (GL_DEPTH_TEST); glPushAttrib (GL_COLOR_BUFFER_BIT); /* Sea green 3 */ glColor3f(0.263, 0.804, 0.502); glBegin(GL_LINES); for (i = -floorSize ; i <= floorSize ; i += floorSize/25) { glVertex3f(-floorSize, -2.0, i); glVertex3f( floorSize, -2.0, i); glVertex3f(i, -2.0, floorSize); glVertex3f(i, -2.0, -floorSize); } glEnd(); glPopAttrib(); glEnable(GL_DEPTH_TEST); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant tous les vertex du sol du terrain Solide. */ /* ------------------------------------------------*/ glNewList (MY_SOLID_FLOOR, GL_COMPILE); glPushAttrib(GL_COLOR_BUFFER_BIT); /* Sol en carreaux */ for (i = -floorSize ; i <= floorSize; i+=floorSize/25) { for (j=-floorSize; j <= floorSize; j+=floorSize/25) { if ( (i+j) % 20 == 0) { glBegin(GL_POLYGON); glColor3f (0.75, 0.5, 0.95); glVertex3f(i-10, -2.0, j-10); glColor3f (0.09, 0.6, 0.8); glVertex3f(i-10, -2.0, j); glVertex3f(i, -2.0, j); glVertex3f(i, -2.0, j-10); glEnd(); } else { glBegin(GL_POLYGON); glColor3f (0.75, 0.11, 0.95); glVertex3f(i-10, -2.0, j-10); glColor3f (0.09, 0.16, 0.8); glVertex3f(i-10, -2.0, j); glVertex3f(i, -2.0, j); glVertex3f(i, -2.0, j-10); glEnd(); } } } glPopAttrib(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant tous les vertex du sol du terrain Solide (Light). */ /* ------------------------------------------------*/ glNewList (ALL_MY_LIGHT_FLOOR, GL_COMPILE); glPushAttrib(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); glColor3f (0.75, 0.25, 0.75); glVertex3f(-floorSize, -2.0, -floorSize); glColor3f (0.95, 0.25, 0.25); glVertex3f(-floorSize, -2.0, floorSize); glColor3f (0.25, 0.95, 0.25); glVertex3f( floorSize, -2.0, floorSize); glColor3f (0.25, 0.25, 0.95); glVertex3f( floorSize, -2.0, -floorSize); glEnd(); glPopAttrib(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant tous les vertex du sol du terrain Wire. */ /* ------------------------------------------------*/ glNewList (MY_WIRE_FLOOR, GL_COMPILE); glPushAttrib(GL_COLOR_BUFFER_BIT); glBegin(GL_LINE_LOOP); glColor3f (0.1, 0.7, 0.9); glVertex3f(-floorSize, -2.0, floorSize); glVertex3f(-floorSize, -2.0,-floorSize); glVertex3f( floorSize, -2.0,-floorSize); glVertex3f( floorSize, -2.0, floorSize); glEnd(); glPopAttrib(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant dans une meme liste les lignes sur le sol et le */ /* terrain de manoeuvres lui-meme. Ceci pour un mode Solide. */ /* ------------------------------------------------*/ glNewList (ALL_MY_SOLID_FLOOR, GL_COMPILE); glPushMatrix(); glPushAttrib(GL_COLOR_BUFFER_BIT); glCallList(MY_SOLID_FLOOR); glPopAttrib(); glPopMatrix(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant dans une meme liste les lignes sur le sol et le */ /* terrain de manoeuvres lui-meme. Ceci pour un mode WireFrame. */ /* ------------------------------------------------*/ glNewList (ALL_MY_WIRE_FLOOR, GL_COMPILE); glPushMatrix(); glPushAttrib(GL_COLOR_BUFFER_BIT); glCallList(MY_WIRE_FLOOR); glDisable(GL_DEPTH_TEST); glCallList(MY_LINES); glEnable(GL_DEPTH_TEST); glPopAttrib(); glPopMatrix(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant dans une meme liste tous les cubes et tous les */ /* prismes octogonaux, ceci pour un mode Solide. */ /* ------------------------------------------------*/ glNewList (ALL_SOLID_OBSTACLES, GL_COMPILE); glPushMatrix(); for (i=0;i<7;i++) { for (j=0;j<7;j++) { glPushMatrix(); /* Affichage des objets sur la scene */ glTranslatef(40.0*i-120, 2.0, 40.0*j-120); if ( (i==3) && (j==3) ) { } else if ( (i+j)%2 == 0) { glPushMatrix(); glTranslatef(0.0, 1.0, 0.0); glScalef (10.0, 10.0, 10.0); glCallList(MY_SOLID_CUBE); glPopMatrix(); } else { glPushMatrix(); glTranslatef(0.0, 1.0, 0.0); glScalef (10.0, 10.0, 10.0); glCallList(MY_SOLID_PRISM); glPopMatrix(); } glPopMatrix(); /* Affichage des objets sur la scene */ } } glPopMatrix(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Liste regroupant dans une meme liste tous les cubes et tous les */ /* prismes octogonaux, ceci pour un mode WireFrame. */ /* ------------------------------------------------*/ glNewList (ALL_WIRE_OBSTACLES, GL_COMPILE); glPushMatrix(); for (i=0;i<7;i++) { for (j=0;j<7;j++) { glPushMatrix(); /* Affichage des objets sur la scene */ glTranslatef(40.0*i-120, 2.0, 40.0*j-120); if ( (i==3) && (j==3) ) { } else if ( (i+j)%2 == 0) { glPushMatrix(); glTranslatef(0.0, 1.0, 0.0); glScalef (10.0, 10.0, 10.0); glCallList(MY_WIRE_CUBE); glPopMatrix(); } else { glPushMatrix(); glTranslatef(0.0, 1.0, 0.0); glScalef (10.0, 10.0, 10.0); glCallList(MY_WIRE_PRISM); glPopMatrix(); } glPopMatrix(); /* Affichage des objets sur la scene */ } } glPopMatrix(); glEndList(); Show_init_progress(); /********************************************/ /* Axe temporaire pour determiner l'origine */ /********************************************/ glNewList (ALL_MY_AXIS, GL_COMPILE); glPushAttrib (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glBegin (GL_LINES); glVertex3f (0.0, -2.0, 0.0); glVertex3f (0.0, 40.0, 0.0); glEnd(); glPopAttrib(); glEndList(); Show_init_progress(); /* ------------------------------------------------*/ /* Listes regroupant dans une meme liste toutes les composantes */ /* d'une explosion simple dans ses images multiples. */ /* ------------------------------------------------*/ glNewList (EXPLOSION_1, GL_COMPILE); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor4f (0.95, 0.95, 0.95, 0.1); auxSolidSphere(1.0); glPopAttrib(); glEndList(); Show_init_progress(); glNewList (EXPLOSION_2, GL_COMPILE); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor4f (0.90, 0.85, 0.75, 0.1); auxSolidSphere(2.0); glPopAttrib(); glEndList(); Show_init_progress(); glNewList (EXPLOSION_3, GL_COMPILE); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor4f (0.85, 0.75, 0.55, 0.1); auxSolidSphere(3.0); glPopAttrib(); glEndList(); Show_init_progress(); glNewList (EXPLOSION_4, GL_COMPILE); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor4f (0.80, 0.65, 0.45, 0.1); auxSolidSphere(4.0); glPopAttrib(); glEndList(); Show_init_progress(); glNewList (EXPLOSION_5, GL_COMPILE); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor4f (0.75, 0.55, 0.35, 0.1); auxSolidSphere(5.0); glPopAttrib(); glEndList(); Show_init_progress(); glNewList (EXPLOSION_6, GL_COMPILE); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor4f (0.70, 0.45, 0.25, 0.1); auxSolidSphere(6.0); glPopAttrib(); glEndList(); Show_init_progress(); glNewList (EXPLOSION_7, GL_COMPILE); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor4f (0.65, 0.35, 0.15, 0.1); auxSolidSphere(7.0); glPopAttrib(); glEndList(); Show_init_progress(); glNewList (EXPLOSION_8, GL_COMPILE); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor4f (0.55, 0.30, 0.10, 0.1); auxSolidSphere(8.0); glPopAttrib(); glEndList(); Show_init_progress(); glNewList (EXPLOSION_9, GL_COMPILE); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor4f (0.45, 0.25, 0.05, 0.1); auxSolidSphere(9.0); glPopAttrib(); glEndList(); Show_init_progress(); glNewList (MY_SOLID_MISSILE, GL_COMPILE); glPushMatrix(); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor4f (0.65, 0.65, 0.65, 0.1); glScalef (1.0, 1.0, 10.0); auxSolidSphere(0.5); glPopAttrib(); glPopMatrix(); glEndList(); Show_init_progress(); glNewList (MY_WIRE_MISSILE, GL_COMPILE); glPushMatrix(); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor4f (0.65, 0.65, 0.65, 0.1); glScalef (1.0, 1.0, 10.0); auxSolidSphere(0.5); glPopAttrib(); glPopMatrix(); glEndList(); Show_init_progress(); /* Definitions des parametres K1 et K2 */ k1 = 0.85; k2 = 1 - k1; /* El-Coyote blue */ Iro = 0.15; Igo = 0.25; Ibo = 0.55; /* ------------------------------------------------*/ /* Liste regroupant tous les vertex du ciel bleu qui apparait autour */ /* de note scene virtuelle. */ /* ------------------------------------------------*/ glNewList(DEEP_BLUE_SKY, GL_COMPILE); glBegin(GL_QUADS); glPushAttrib(GL_COLOR_BUFFER_BIT); for (i=CYL_FACES;i>=1;i--) { /* Calcul des points du cylindre */ x2i = 0.5 * cos ( (i-1) * PI/(CYL_FACES/2)); x2j = 0.5 * sin ( (i-1) * PI/(CYL_FACES/2)); x1i = 0.5 * cos ( i * PI/(CYL_FACES/2)); x1j = 0.5 * sin ( i * PI/(CYL_FACES/2)); /* Calcul de la normale */ Normale1 (x1i, x1j, x1i, x1j, &yi, &yj); /* Calcul du produit scalaire */ prod = ProduitScalaire (yi, yj, 5000.0, 2500.0); prod = (prod + 1) / 2; /* Calcul des indices de couleur */ Ir = k1 * Iro + k2 * prod * Irl; Ig = k1 * Igo + k2 * prod * Igl; Ib = k1 * Ibo + k2 * prod * Ibl; /* Affichage d'un vecteur */ glColor3f (Ir*2, Ig*2, Ib*2); glVertex3f (x1i, -0.5, x1j ); glColor3f (Ir/2, Ig/2, Ib/2); glVertex3f (x1i, 0.5, x1j ); /* Calcul de la normale */ Normale1 (x2i, x2j, x2i, x2j, &yi, &yj); /* Calcul du produit scalaire */ prod = ProduitScalaire (yi, yj, 5000.0, 2500.0); prod = (prod + 1) / 2; /* Calcul des indices de couleur */ Ir = k1 * Iro + k2 * prod * Irl; Ig = k1 * Igo + k2 * prod * Igl; Ib = k1 * Ibo + k2 * prod * Ibl; /* Affichage d'un vecteur */ glColor3f (Ir/2, Ig/2, Ib/2); glVertex3f (x2i, 0.5, x2j ); glColor3f (Ir*2, Ig*2, Ib*2); glVertex3f (x2i, -0.5, x2j ); } glPopAttrib(); glEnd(); glEndList(); Show_init_progress(); }