Historique des modifications - Message

Message #44

Sujet: Fake Glow Effet en C++


Type Date Auteur Contenu
Dernière modification 29-09-2006 17:35:57 DeusXL
Bien le bonjour, essaye ça :
core::vector3df getTargetAngle( core::vector3df v, core::vector3df r) {
         //v -current node position
         //r -target node position
         //Note : c'est des formules assez lourdes en terme de calcul, donc il faudrait optimiser selon tes besoins
         core::vector3df angle;
         float x,y,z;
         x = r.X - v.X;
         y = r.Y - v.Y;
         z = r.Z - v.Z;

         //angle in X-Z plane
         angle.Y = atan2 (x, z);
         angle.Y *= (180 / 3.14); //converting from rad to degrees

         //just making sure angle is somewhere between 0-360 degrees
         if(angle.Y < 0) angle.Y += 360;
         if(angle.Y >= 360) angle.Y -= 360;

         //angle in Y-Z plane while Z and X axes are already rotated around Y
         float z1 = sqrt(x*x + z*z);

         angle.X = atan2 (z1, y);
         angle.X *= (180 / 3.14); //converting from rad to degrees
         angle.X -= 90;

         //just making sure angle is somewhere between 0-360 degrees
         if(angle.X < 0) angle.X += 360;
         if(angle.X >= 360) angle.X -= 360;
         //note : ces deux lignes devraient être remplacées par angle.X = angle.X % 360 à mon avis... C'est plus rapide et plus sûr...
         return angle;
      }

Et quelque part dans ton code :
vector3df rotation = getTargetAngle(camera->getPosition(), camera->getTarget() + camera->getPosition());

Ca devrait fonctionner, bien sûr c'est à optimiser mais c'est déjà pas trop mal comme ça.
Création du message 29-09-2006 17:33:10 DeusXL
Bien le bonjour, essaye ça :
core::vector3df getTargetAngle( core::vector3df v, core::vector3df r) {
         //v -current node position
         //r -target node position
         //Note : c'est des formules assez lourdes en terme de calcul, donc il faudrait optimiser selon tes besoins
         core::vector3df angle;
         float x,y,z;
         x = r.X - v.X;
         y = r.Y - v.Y;
         z = r.Z - v.Z;

         //angle in X-Z plane
         angle.Y = atan2 (x, z);
         angle.Y *= (180 / 3.14); //converting from rad to degrees

         //just making sure angle is somewhere between 0-360 degrees
         if(angle.Y < 0) angle.Y += 360;
         if(angle.Y >= 360) angle.Y -= 360;

         //angle in Y-Z plane while Z and X axes are already rotated around Y
         float z1 = sqrt(x*x + z*z);

         angle.X = atan2 (z1, y);
         angle.X *= (180 / 3.14); //converting from rad to degrees
         angle.X -= 90;

         //just making sure angle is somewhere between 0-360 degrees
         if(angle.X < 0) angle.X += 360;
         if(angle.X >= 360) angle.X -= 360;
         //note : ces deux lignes devraient être remplacées par angle.X = angle.X % 360 à mon avis... C'est plus rapide et plus sûr...
         return angle;
      }

Et quelque part dans ton code :
vector3df rotation = getTargetAngle(camera->getPosition(), camera->getTarget() + camera->getPosition());

Ca devrait fonctionner, bien sûr c'est à optimiser mais c'est déjà pas trop mal comme ça.

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
138 invités en ligne
membre en ligne: -
RSS Feed