Historique des modifications - Message

Message #2685

Sujet: C++ Irrlicht 1.3 Moteur de Terrain avec Vertex Alpha


Type Date Auteur Contenu
Dernière modification 16-07-2007 12:10:19 katsankat
Salut, un snippet que j'ai posté ce week-end sur le forum officiel, pour avoir gravité et collision avec le sol. Marche du feu de dieu avec ta classe.

La seule différence: ton getHeight() retourne -999999.999f si on n'a rien sous les pieds, alors que le getHeight du node officiel retourne -999999.9f Je pense qu'il faudrait aussi retourner cette valeur, bref simplement enlever les deux dernières décimales.


// Quelque part:
  f32 Gravity = 0.3f; // 0 = pas de gravité
  f32 HeightAboveGround=10.f;

// Dans le main loop:
  env->drawAll();

       if (Gravity)
       {
         vector3df pos = camera->getPosition();
         float Y = terrain->getHeight(pos.X, pos.Z);
         //if (Y != -999999.9f) // no ground under, do nothing
         if (Y != -999999.999f)
         {
          pos.Y -= Gravity;
          Y += HeightAboveGround;
          if (pos.Y > Y) camera->setPosition(pos);
          else           camera->setPosition(vector3df(pos.X, Y, pos.Z));
         }
       }

  driver->endScene();

On peut l'optimiser en ajoutant if (isMoving) pour pas recalculer si on bouge pas.
C'est moins complet qu'un moteur physique mais les FPS restent.

Ca serait encore mieux niveau performances si le TriangleSelector était créé dans le constructeur plutôt qu'à chaque frame, en passant un bool au constructeur par exemple. La classe pourrait garder un pointeur en protected et le détruire dans le destructeur.

A présent je me demande comment appliquer le fog sur le terrain avec le "texturage normal" ...
Création du message 16-07-2007 11:58:00 katsankat
Salut, un snippet que j'ai posté ce week-end sur le forum officiel, pour avoir gravité et collision avec le sol. Marche du feu de dieu avec ta classe.

La seule différence: ton getHeight() retourne -999999.999f si on n'a rien sous les pieds, alors que le getHeight du node officiel retourne -999999.9f Je pense qu'il faudrait aussi retourner cette valeur, bref simplement enlever les deux dernières décimales.


// Quelque part:
  f32 Gravity = 0.3f; // 0 = pas de gravité
  f32 HeightAboveGround=10.f;

// Dans le main loop:
  env->drawAll();

       if (Gravity)
       {
         vector3df pos = camera->getPosition();
         float Y = terrain->getHeight(pos.X, pos.Z);
         //if (Y != -999999.9f) // no ground under, do nothing
         if (Y != -999999.999f)
         {
          pos.Y -= Gravity;
          Y += HeightAboveGround;
          if (pos.Y > Y) camera->setPosition(pos);
          else           camera->setPosition(vector3df(pos.X, Y, pos.Z));
         }
       }

  driver->endScene();

On peut l'optimiser en ajoutant if (isMoving) pour pas recalculer si on bouge pas.
C'est moins complet qu'un moteur physique mais les FPS restent.

Ca serait encore mieux niveau performances si le TriangleSelector était créé dans le constructeur plutôt qu'à chaque frame, en passant un bool au constructeur par exemple. La classe pourrait garder un pointeur en protected et le détruire dans le destructeur.

A présent je me demande comment appliquer le fog sur le terrain avec le "texturage normal" ...

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
190 invités en ligne
membre en ligne: -
RSS Feed