#0 

22-07-2010 20:00:58

Superjaco
Membre
Date d'inscription: 22-07-2010
Messages: 20

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


#1 

22-07-2010 20:14:26

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 908
Corrections: 2
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


#2 

22-07-2010 20:30:24

Superjaco
Membre
Date d'inscription: 22-07-2010
Messages: 20

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


#3 

22-07-2010 20:50:34

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 908
Corrections: 2
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


#4 

23-07-2010 17:48:00

Superjaco
Membre
Date d'inscription: 22-07-2010
Messages: 20

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


#5 

23-07-2010 23:05:37

firnafin
Abonné
Date d'inscription: 31-03-2007
Messages: 150

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


#6 

24-07-2010 10:58:22

Superjaco
Membre
Date d'inscription: 22-07-2010
Messages: 20

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


#7 

24-07-2010 15:13:01

Superjaco
Membre
Date d'inscription: 22-07-2010
Messages: 20

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é
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
881 membres
1427 sujets
11117 messages
Dernier membre inscrit: Bidule
50 invités en ligne
Aucun membre connecté
RSS Feed