Exemple #1
0
        /// <summary>
        /// Creer un nuage
        /// </summary>
        /// <param name="nuage"></param>
        /// <param name="init">true s'il s'agit de la creation initiale, false si c'est un
        /// recyclage d'un nuage qui est passe derriere la camera</param>
        void creerNuage(ref Nuage nuage, bool init)
        {
            if (nuage == null)
            {
                nuage             = new Nuage();
                nuage._particules = new List <Particule>();
            }
            else
            {
                nuage._particules.Clear();
            }

            float rayonNuage = FloatRandom(RAYON_MIN, RAYON_MAX);

            nuage.x = FloatRandom(-_tailleCubeX * 50, _tailleCubeX * 50);
            nuage.y = _positionNuage * _tailleCubeY * FloatRandom(-RAYON_MIN, RAYON_MAX * 2);

            if (init)
            {
                nuage.z = -FloatRandom(-_zCamera, _tailleCubeZ * 10);
            }
            else
            {
                nuage.z = -_tailleCubeZ * 10;
            }

            // Genere le nuage de facon 'fractale'
            _NbParticules = GenereNuage(ref nuage, nuage.x, nuage.y, nuage.z, rayonNuage, TAILLE_PARTICULE, MAX_NIVEAU);
        }
Exemple #2
0
        /// <summary>
        /// Genere recursivement un nuage, pour lui donner son aspect fractal
        /// </summary>
        /// <param name="nuage"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="z"></param>
        /// <param name="rayonNuage"></param>
        /// <param name="niveau"></param>
        private int GenereNuage(ref Nuage nuage, float x, float y, float z, float rayonNuage, float tailleParticule, int niveau)
        {
            Particule p = new Particule();

            p.x      = x;
            p.y      = y;
            p.z      = z;
            p.taille = FloatRandom(tailleParticule * 0.75f, tailleParticule * 1.5f);
            p.alpha  = FloatRandom(ALPHA * 0.5f, ALPHA * 2.0f);
            p.type   = r.Next(0, NB_TEXTURES);
            nuage._particules.Add(p);
            int res = 1;

            if (niveau > 1)
            {
                for (int i = 0; i < NB_EMBRANCHEMENTS; i++)
                {
                    float AngleX         = FloatRandom(0, (float)Math.PI * 2);
                    float AngleZ         = FloatRandom(0, (float)Math.PI * 2);
                    float distanceCentre = FloatRandom(rayonNuage * 0.2f, rayonNuage);

                    res += GenereNuage(ref nuage,
                                       x + distanceCentre * 3.0f * (float)Math.Cos(AngleX),
                                       y + distanceCentre * 0.5f * (float)Math.Sin(AngleX),
                                       z + distanceCentre * 2.0f * (float)Math.Sin(AngleZ),
                                       rayonNuage * 0.5f,
                                       tailleParticule * 0.75f,
                                       niveau - 1);
                }
            }

            return(res);
        }
Exemple #3
0
        void CreateNuage(ref Nuage nuage, bool init)
        {
            if (nuage == null)
            {
                nuage = new Nuage();
            }

            nuage._nbParticules = r.Next(NBPARTICULES_MIN, NBPARTICULES_MAX);
            nuage._rayon        = FloatRandom(RAYON_MIN, RAYON_MAX);
            nuage._centreX      = FloatRandom(-_tailleCubeX * 50, _tailleCubeX * 50);
            nuage._centreY      = _positionNuage * _tailleCubeY * 4; //FloatRandom( _tailleCubeY/2, _tailleCubeY ) ;

            if (init)
            {
                nuage._centreZ = FloatRandom(_zCamera, _tailleCubeZ * 8);
            }
            else
            {
                nuage._centreZ = FloatRandom(_tailleCubeZ / 2, _tailleCubeZ * 8);
            };

            nuage._points  = new Vecteur3D[nuage._nbParticules];
            nuage._tailles = new float[nuage._nbParticules];
            nuage._type    = new int[nuage._nbParticules];

            for (int i = 0; i < nuage._nbParticules; i++)
            {
                nuage._points[i] = new Vecteur3D(nuage._centreX + FloatRandom(-nuage._rayon, nuage._rayon),
                                                 nuage._centreY + FloatRandom(-nuage._rayon, nuage._rayon),
                                                 nuage._centreZ + FloatRandom(-nuage._rayon / 8, nuage._rayon / 8));

                nuage._tailles[i] = FloatRandom(TAILLE_PARTICULE_MIN, TAILLE_PARTICULE_MAX);
                nuage._type[i]    = r.Next(0, 2);
            }
        }