#1 

22-07-2010 18:00:58

Superjaco
Membres
Date d'inscription:
Messages: 20
IP: 90.16.129.84
Courriel

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


#2 

22-07-2010 18:14:26

Magun
Administrateurs
Avatar de Magun
Date d'inscription:
Messages: 910
IP: 188.93.45.30
Courriel  Site web

bon aller je suis un peut d'humeur ...

Code c++ :


camera->setTarget(node);
camera->setParent(node);
camera->setPosition(vector3df(25,0,10));
//update
node->setPosition(...);


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


#3 

22-07-2010 18:30:24

Superjaco
Membres
Date d'inscription:
Messages: 20
IP: 90.16.129.84
Courriel

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 ?


Hors ligne


#4 

22-07-2010 18:50:34

Magun
Administrateurs
Avatar de Magun
Date d'inscription:
Messages: 910
IP: 188.93.45.30
Courriel  Site web

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


#5 

23-07-2010 15:48:00

Superjaco
Membres
Date d'inscription:
Messages: 20
IP: 90.16.129.84
Courriel

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.


Hors ligne


#6 

23-07-2010 21:05:37

firnafin
Membres
Avatar de firnafin
Date d'inscription:
Messages: 150
IP: 93.9.158.164
Courriel

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.


Hors ligne


#7 

24-07-2010 08:58:22

Superjaco
Membres
Date d'inscription:
Messages: 20
IP: 90.16.129.84
Courriel

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 ?


Hors ligne


#8 

24-07-2010 13:13:01

Superjaco
Membres
Date d'inscription:
Messages: 20
IP: 90.16.129.84
Courriel

Problème corrigé.
Le node de la cam étant déjà enfant du perso, j'ai donc utiliser updateAbsolutePosition().


Hors ligne


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