/// <summary> /// Affichage /// </summary> /// <param name="gl"></param> /// <param name="maintenant"></param> /// <param name="tailleEcran"></param> /// <param name="couleur"></param> public override void AfficheOpenGL(OpenGL gl, Temps maintenant, Rectangle tailleEcran, Color couleur) { #if TRACER RenderStart(CHRONO_TYPE.RENDER); #endif float depuisdebut = (float)(debut.Subtract(_DernierDeplacement).TotalMilliseconds / 1000.0); float rotation = (float)Math.Cos(depuisdebut / PERIODE_ROTATION) * VITESSE_ROTATION; float[] col = { couleur.R / 512.0f, couleur.G / 512.0f, couleur.B / 512.0f, 1.0f }; gl.ClearColor(0, 0, 0, 1); gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); gl.LoadIdentity(); gl.Translate(0, 0, -_zCamera); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.Disable(OpenGL.GL_FOG); gl.Enable(OpenGL.GL_DEPTH); // Lumiere gl.Enable(OpenGL.GL_LIGHTING); gl.Enable(OpenGL.GL_LIGHT0); gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_POSITION, LightPos); gl.Enable(OpenGL.GL_COLOR_MATERIAL); gl.Material(OpenGL.GL_FRONT_AND_BACK, OpenGL.GL_SPECULAR, col); gl.Material(OpenGL.GL_FRONT_AND_BACK, OpenGL.GL_SHININESS, 128); gl.ColorMaterial(OpenGL.GL_FRONT_AND_BACK, OpenGL.GL_AMBIENT_AND_DIFFUSE); gl.Rotate(0, 0, rotation); gl.Color(col); // Tracer les anneaux for (int i = 0; i < NB_ANNEAUX - 1; i++) { gl.Begin(OpenGL.GL_QUADS); { int iPlusUn = i < (NB_ANNEAUX - 1) ? i + 1 : 0; for (int j = 0; j < TAILLE_ANNEAU; j++) { if ((j + 1) % BANDES_PLEINES != 0) { int jPlusUn = j < (TAILLE_ANNEAU - 1) ? j + 1 : 0; Vecteur3D n = NormaleTriangle(_anneaux[iPlusUn, j], _anneaux[i, j], _anneaux[i, jPlusUn]); gl.Normal(n.x, n.y, n.z); gl.Vertex(_anneaux[i, j].x, _anneaux[i, j].y, _anneaux[i, j].z); gl.Vertex(_anneaux[i, jPlusUn].x, _anneaux[i, jPlusUn].y, _anneaux[i, jPlusUn].z); gl.Vertex(_anneaux[iPlusUn, jPlusUn].x, _anneaux[iPlusUn, jPlusUn].y, _anneaux[iPlusUn, jPlusUn].z); gl.Vertex(_anneaux[iPlusUn, j].x, _anneaux[iPlusUn, j].y, _anneaux[iPlusUn, j].z); } } } gl.End(); } #if TRACER RenderStop(CHRONO_TYPE.RENDER); #endif }
public virtual CollisionTir Tirer(Point3D p_positionArme, Vecteur3D p_direction) { CollisionTir collisionTir = new CollisionTir(); collisionTir.ObjetTouche = this.ObtenirCollision(p_positionArme, p_direction); collisionTir.Degat = this.CalculerDegat(); return(collisionTir); }
/// <summary> /// Placer un anneau /// </summary> /// <param name="i"></param> void PlaceAnneau(int i) { float profondeur = _tailleCubeZ * 50f; float ecart = profondeur / NB_ANNEAUX; float z = _tailleCubeZ - (i * ecart); for (int j = 0; j < TAILLE_ANNEAU; j++) { double angle = (Math.PI * 2.0 * j) / (double)TAILLE_ANNEAU; _anneaux[i, j] = new Vecteur3D(_CentreAnneauX + (float)(RAYON_ANNEAU * Math.Cos(angle)), _CentreAnneauY + (float)(RAYON_ANNEAU * Math.Sin(angle)), z); } }
private ObjetJeu ObtenirCollision(Point3D p_positionArme, Vecteur3D p_direction) { return(new Mur()); // Normalement un calcul ici }