Historique des modifications - Message

Message #44

Sujet: Fake Glow Effet en C++


TypeDateAuteurContenu
Dernière modification29-09-2006 17:35:57DeusXL
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 message29-09-2006 17:33:10DeusXL
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

OptionsLiens officielsCaractéristiquesStatistiquesCommunauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1441 sujets
11339 messages
Dernier membre inscrit: Saidov17
116 invités en ligne
membre en ligne: -
RSS Feed