Ejemplo n.º 1
0
        /// <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
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        /// <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);
            }
        }
Ejemplo n.º 4
0
 private ObjetJeu ObtenirCollision(Point3D p_positionArme, Vecteur3D p_direction)
 {
     return(new Mur()); // Normalement un calcul ici
 }