Historique des modifications - Message

Message #6051

Sujet: Camera personalisée (style wow)


TypeDateAuteurContenu
Dernière modification18-02-2009 20:21:19capry
Je sais qu'il ne faut pas poster 3 messages d'affiliés mais comme personne ne met de nouveaux messages...

Bref je me suis essayé à modifier un peu le code pour tourner autour du perso, mais cette fois-ci en prenant en compte la hauteur ce qui donne au lieu de :

...
  if(MouseX != 0)
  {
        if (MouseX <= 8*.05f) 
        {
            m_updated = true;
            m_yRotationAngle += 0.01;
            while (m_yRotationAngle > 2*PI)
                m_yRotationAngle -= 2*PI;
        }
        else if (MouseX >= 8*.95f) 
        {
            m_updated = true;
            m_yRotationAngle -= 0.01;    
            while (m_yRotationAngle < 2*PI)
                    m_yRotationAngle += 2*PI;
        }
  }
 }
 if (m_DernierePosition != m_Nmodele->getPosition()) 
 {
       m_updated = true;
       m_DernierePosition = m_Nmodele->getPosition();
 }
 if (m_updated) 
 {
  m_updated = false;
  vector3df m_Camerapos = m_DernierePosition;
  
 m_Camerapos.X += distance*sin(m_yRotationAngle);
 m_Camerapos.Z += distance*cos(m_yRotationAngle);
 m_Camerapos.Y += distance;
  m_Cam->setPosition(m_Camerapos);
  m_Cam->setTarget(m_DernierePosition);
 }
...

Ceci :
if(MouseY != 0)
      {
        if (MouseY <= 8*.05f) 
        {
            m_updated = true;
            m_xRotationAngle -= 0.01;
            while (m_xRotationAngle < 2*PI)
                m_xRotationAngle -= 2*PI;
        }
        else if (MouseY >= 8*.95f) 
        {
            m_updated = true;
            m_xRotationAngle += 0.01;    
            while (m_xRotationAngle > 2*PI)
                    m_xRotationAngle += 2*PI;
        }
      }
      if (m_DernierePosition != m_Nmodele->getPosition()) 
      {
       m_updated = true;
       m_DernierePosition = m_Nmodele->getPosition();
      }
 if (m_updated) 
 {
  m_updated = false;
  vector3df m_Camerapos = m_DernierePosition;
  m_Camerapos.X += distance;
  m_Camerapos.Z += distance*cos(m_xRotationAngle);
  m_Camerapos.Y += distance*tan(m_xRotationAngle);
  m_Cam->setPosition(m_Camerapos);
  m_Cam->setTarget(m_DernierePosition);
 }

La caméra gère maintenant la hauteur mais le problème c'est que la caméra passe par exemple au dessus du perso, s'éloigne de plus en plus vers le haut beaucoup trop loin, et au bout d'une certaine distance se retrouve à une distance normal en dessous de la caméra o_O.

Comme j'ai peur de mal m'exprimer voici un lien pour télécharger le programme :
http://www.megaupload.com/?d=YHNZFDWW


Sinon je voudrait savoir (car je n'ai pas trouver) quelle ligne dois-je ajouter ou qu'est ce que je doit ajouter pour que la caméra ne dépasse pas la distance donnée ?
Merci d'avance,
Capry





EDIT :

Bah apparment j'ai trouvé comment faire pour l'axe Y :

 if (m_updated) 
 {
  m_updated = false;
  vector3df m_Camerapos = m_DernierePosition;
  m_Camerapos.X += distance*cos(m_xRotationAngle);
  m_Camerapos.Z += distance*cos(m_xRotationAngle);
  m_Camerapos.Y += distance*sin(m_xRotationAngle);
  m_Cam->setPosition(m_Camerapos);
  m_Cam->setTarget(m_DernierePosition);
 }

Donc comme ça la caméra se déplace bien sur l'axe horizontal, mais est incompatible avec l'autre, c'est-à-dire que la caméra fait n'importe quoi si je met :

if(m_updated) 
 {
  m_updated = false;
  vector3df m_Camerapos = m_DernierePosition;
  //Déplacement verticaux
   m_Camerapos.X += distance*cos(m_xRotationAngle);
   m_Camerapos.Z += distance*cos(m_xRotationAngle);
   m_Camerapos.Y += distance*sin(m_xRotationAngle);
  //Déplacement horizontaux
   m_Camerapos.X += distance*sin(m_yRotationAngle);
   m_Camerapos.Z += distance*cos(m_yRotationAngle);
   m_Camerapos.Y += distance;
  
   m_Cam->setPosition(m_Camerapos);
   m_Cam->setTarget(m_DernierePosition);
 }

Je touche au but, mais il me reste encore ce problème avant que la caméra imite celle de WoW par exemple.
Merci de m'aider à le résoudre (même si pour l'instant je parle un peu tout seul XD).
Bonne soirée,

Capry
Création du message18-02-2009 14:10:59capry
Je sais qu'il ne faut pas poster 3 messages d'affiliés mais comme personne ne met de nouveaux messages...

Bref je me suis essayé à modifier un peu le code pour tourner autour du perso, mais cette fois-ci en prenant en compte la hauteur ce qui donne au lieu de :

...
  if(MouseX != 0)
  {
        if (MouseX <= 8*.05f) 
        {
            m_updated = true;
            m_yRotationAngle += 0.01;
            while (m_yRotationAngle > 2*PI)
                m_yRotationAngle -= 2*PI;
        }
        else if (MouseX >= 8*.95f) 
        {
            m_updated = true;
            m_yRotationAngle -= 0.01;    
            while (m_yRotationAngle < 2*PI)
                    m_yRotationAngle += 2*PI;
        }
  }
 }
 if (m_DernierePosition != m_Nmodele->getPosition()) 
 {
       m_updated = true;
       m_DernierePosition = m_Nmodele->getPosition();
 }
 if (m_updated) 
 {
  m_updated = false;
  vector3df m_Camerapos = m_DernierePosition;
  
 m_Camerapos.X += distance*sin(m_yRotationAngle);
 m_Camerapos.Z += distance*cos(m_yRotationAngle);
 m_Camerapos.Y += distance;
  m_Cam->setPosition(m_Camerapos);
  m_Cam->setTarget(m_DernierePosition);
 }
...

Ceci :
if(MouseY != 0)
      {
        if (MouseY <= 8*.05f) 
        {
            m_updated = true;
            m_xRotationAngle -= 0.01;
            while (m_xRotationAngle < 2*PI)
                m_xRotationAngle -= 2*PI;
        }
        else if (MouseY >= 8*.95f) 
        {
            m_updated = true;
            m_xRotationAngle += 0.01;    
            while (m_xRotationAngle > 2*PI)
                    m_xRotationAngle += 2*PI;
        }
      }
      if (m_DernierePosition != m_Nmodele->getPosition()) 
      {
       m_updated = true;
       m_DernierePosition = m_Nmodele->getPosition();
      }
 if (m_updated) 
 {
  m_updated = false;
  vector3df m_Camerapos = m_DernierePosition;
  m_Camerapos.X += distance;
  m_Camerapos.Z += distance*cos(m_xRotationAngle);
  m_Camerapos.Y += distance*tan(m_xRotationAngle);
  m_Cam->setPosition(m_Camerapos);
  m_Cam->setTarget(m_DernierePosition);
 }

La caméra gère maintenant la hauteur mais le problème c'est que la caméra passe par exemple au dessus du perso, s'éloigne de plus en plus vers le haut beaucoup trop loin, et au bout d'une certaine distance se retrouve à une distance normal en dessous de la caméra o_O.

Comme j'ai peur de mal m'exprimer voici un lien pour télécharger le programme :
http://www.megaupload.com/?d=YHNZFDWW


Sinon je voudrait savoir (car je n'ai pas trouver) quelle ligne dois-je ajouter ou qu'est ce que je doit ajouter pour que la caméra ne dépasse pas la distance donnée ?
Merci d'avance,
Capry





EDIT :

Bah apparment j'ai trouvé comment faire pour l'axe Y :

 if (m_updated) 
 {
  m_updated = false;
  vector3df m_Camerapos = m_DernierePosition;
  m_Camerapos.X += distance*cos(m_xRotationAngle);
  m_Camerapos.Z += distance*cos(m_xRotationAngle);
  m_Camerapos.Y += distance*sin(m_xRotationAngle);
  m_Cam->setPosition(m_Camerapos);
  m_Cam->setTarget(m_DernierePosition);
 }

Donc comme ça la caméra se déplace bien sur l'axe horizontal, mais est incompatible avec l'autre, c'est-à-dire que la caméra fait n'importe quoi si je met :

if(m_updated) 
 {
  m_updated = false;
  vector3df m_Camerapos = m_DernierePosition;
  //Déplacement verticaux
   m_Camerapos.X += distance*cos(m_xRotationAngle);
   m_Camerapos.Z += distance*cos(m_xRotationAngle);
   m_Camerapos.Y += distance*sin(m_xRotationAngle);
  //Déplacement horizontaux
   m_Camerapos.X += distance*sin(m_yRotationAngle);
   m_Camerapos.Z += distance*cos(m_yRotationAngle);
   m_Camerapos.Y += distance;
  
   m_Cam->setPosition(m_Camerapos);
   m_Cam->setTarget(m_DernierePosition);
 }

Je touche au but, mais il me reste encore ce problème avant que la caméra imite celle de WoW par exemple.
Merci de m'aider à le résoudre (même si pour l'instant je parle un peu tout seul XD).
Bonne soirée,

Capry

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