Historique des modifications - Message

Message #6051

Sujet: Camera personalisée (style wow)


Type Date Auteur Contenu
Dernière modification 18-02-2009 20:21:19 capry
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 message 18-02-2009 14:10:59 capry
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

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