Bonsoir,
je me permet de solliciter votre aide pour un petit problème de caméra.
Je dispose d'une caméra de base (ICameraSceneNode) et je voudrai que cette caméra suive le scène node de mon personnage.
Ainsi à la fin de mes fonctions de déplacement, je met à jour les position du personnage et de la caméra de cette manière :
m_node->setPosition(irr::core::vector3df(m_x, m_y, m_z));
m_camera->setPosition(irr::core::vector3df(m_x-25, m_y, m_z+10));
Le personnage, lui se déplace bien, mais la caméra elle reste fixe.
Comment cela se fait t-il et comment puis-je remédier à ce problème simplement.
Merci.
Hors ligne
bon aller je suis un peut d'humeur ...
ps1: pourquoi utiliser 3 variable pour changer la position ? passe par un vector3df que tu modifie ...
ps2: bien que je n'utilise pas irrlicht de puis un bon moment, de mémoire il me semble que sa aurais du marcher quand même ta chose ( si tu veut poste ta fonction d'update je peut regarder ... )
ps3: plus cas aller faire chauffer mon thé
Hors ligne
Qu'appelle tu la fonction d'udapte ?
Les lignes qui mettent à jour la position sont dans mon premier post.
Veut tu parler des lignes qui modifis m_, m_y et m_z ?
Dernière modification par Superjaco (22-07-2010 20:32:39)
Hors ligne
oui et non je veut dire tu n'as tout de même pas que ces deux lignes pour faire le rendue de ta scène ?
comment calcule tu la position ... etc
ps: ah mon thé est chaut *-*
Hors ligne
la fonction avancer :
void perso::avancer (double time)
{
//Si il n'avancais pas a la frame precedente
if (m_avance==false)
{
m_avance = true;
m_tourneAGauche = false;
m_tourneADroite=false;
m_recule=false;
}
m_z = m_z+(cos(m_rotate*(M_PI/180))*time*10);
m_x = m_x+(cos(m_rotate*(M_PI/180))*time*10);
m_node->setPosition(irr::core::vector3df(m_x, m_y, m_z));
m_camera->setPosition(irr::core::vector3df(m_x-1.0f, m_y-1.0f, m_z-1.0f));
}
Sinon ton code ne marche pas.
Dernière modification par Superjaco (23-07-2010 17:49:51)
Hors ligne
Avec
m_camera->setPosition(irr::core::vector3df(m_x-1.0f, m_y-1.0f, m_z-1.0f));
la camera devrait bouger a moins qu' une coquille se soit glisser ailleurs dans le code. De plus si tu n'applique pas la suggestion du code de Magun la camera ne bougera pas de la bonne façon puisque setposition determine la position par rapport au repere parent. Le systeme parent/enfant est la pour faire le gere de chose que tu essayes de faire ( deplacer camera ac personnage .. ) , et ca évite des ennuis.
Sans le reste du code je penses pas que quelqu'un puisse vraiment t'aider car jusqu'a preuve du contraire la fonction setPosition ne bug pas.
Dernière modification par firnafin (23-07-2010 23:07:20)
Hors ligne
Alors, la méthode initialise, ou je crée la caméra :
void Perso::initialise ( int vie, string name, int team, double x, double y, double z, int rotate, irr::scene::ISceneManager *sceneManager, irr::video::IVideoDriver *driver)
{
//Initialise les attributs...
m_vie = vie;
m_name = name;
m_team = team;
m_x = x;
m_y = y;
m_z = z;
m_rotate = rotate;
// Creation du modele et du node
irr::scene::IAnimatedMesh* modele =
sceneManager->getMesh("C:\\perso.obj");
m_node = // creation du noeud
sceneManager->addAnimatedMeshSceneNode(modele);
m_node->setMaterialFlag(irr::video::EMF_LIGHTING, false);
m_node->setMaterialTexture(0, driver->getTexture("C:\\perso.mtl") );
m_node->setPosition(irr::core::vector3df(m_x, m_y, m_z));
//Creation de la camera
m_camera = sceneManager -> addCameraSceneNode
(m_node, irr::core::vector3df(m_x, m_y+10, m_z-25), irr::core::vector3df(m_x, m_y, m_z));
}
J'ai pensé, est ce que sa peut venir du fait que je n'ai pas envoyé le driver ou le sceneManager à ma fonction avancer ?
Dernière modification par Superjaco (24-07-2010 11:08:09)
Hors ligne
Problème corrigé.
Le node de la cam étant déjà enfant du perso, j'ai donc utiliser updateAbsolutePosition().
Hors ligne