Historique des modifications - Message

Message #11104

Sujet: Problème de Caméra troisième personne


Type Date Auteur Contenu
Création du message 01-03-2013 01:10:25 jonath313
Bonjour,

Je suis entrain de créer ma propre caméra à la troisième personne, mais quelques points me donnent du fil à retordre.
Mon programme contient trois fichier : main, CLEventReceiver.h et cpp,

J'essai d'intégrer ma caméra dans le fichier CLEventReceiver.cpp, mais je n'arrive pas à faire tourner celle-ci autour de mon perso. Après de nombreuses tentatives, je viens sollicité l'aide de la communauté d'irrlicht !

J'ai regardé les autres postes relatifs à ce sujet, mais n'étant pas programmeur pro j'ai du mal à associé les exemples et mon code.

Enfait, ma caméra va bien à droite et à gauche, mais arrivé à un certain point elle continue de façon linéaire et par conséquent ne fait pas le tour de mon perso.

Le second point est que la caméra ne suit pas le perso. Je ne veux pas la parenter car sinon elle sera bloqué de tout mouvement.

Merci d'avance pour vos commentaires !



Class CLEventReceiver.cpp :

Code c++ :


CLEventReceiver::CLEventReceiver(irr::scene::IAnimatedMeshSceneNode* Nperso, irr::scene::ICameraSceneNode* camera3,core::vector3df playerLastPosition)//revoilà notre constructeur :)
{
    m_camGauche = false;
    m_camDroite = false;
    m_PivoCamGauche = false;
    m_PivoCamDroite = false;
}

bool CLEventReceiver::OnEvent(const irr::SEvent &event)//En cas d'évenement :
{
    if(m_Ncamera3 != 0  && event.EventType == irr::EET_KEY_INPUT_EVENT && event.KeyInput.Key == irr::KEY_LEFT)
    {
        if(event.KeyInput.PressedDown == true)
        m_camGauche = true;
        else
        m_camGauche = false;
        return true;
    }

    if(m_Ncamera3 != 0  && event.EventType == irr::EET_KEY_INPUT_EVENT && event.KeyInput.Key == irr::KEY_RIGHT)
    {
        if(event.KeyInput.PressedDown == true)
        m_camDroite = true;
        else
        m_camDroite = false;
        return true;
    }

    return false;
}


void CLEventReceiver::majPosMesh()//revoilà notre chère fonction de mise à jour de la position
{

core::vector3df a =m_Ncamera3->getPosition();
core::vector3df b= m_Ncamera3->getRotation();

float diry = ((d.Y+12)*3.1415926535897)/180;
float diryCam = ((b.Y+12)*3.1415926535897)/180; 

int speed=1;

        if(m_Ncamera3 != 0 && m_camGauche == true){
         m_PivoCamGauche = true;

                    a.X +=  speed * sin(a.Y * PI/180.0f);
                    a.Y -=  speed * - cos(a.Y * PI/180.0f);
                    b.Y += 0.3;
        }
        else m_camGauche = false;

         if(m_Ncamera3 != 0 && m_camDroite == true){
         m_PivoCamDroite = true;
                    a.X -=  speed * sin(a.Y *  PI/180.0f);
                    a.Y +=  speed * - cos(a.Y *  PI/180.0f);
                    b.Y += 0.3;
        }
        m_Nperso->setPosition(c);
        m_Nperso->setRotation(d);
        m_Ncamera3->setPosition(a);
        m_Ncamera3->setRotation(b);
}
 


Et voici le main :

Code c++ :



....

    /* PERSO*/
    irr::scene::IAnimatedMesh* perso;
    perso = (irr::scene::IAnimatedMesh*)sceneManager->getMesh("model/testbox5.X");
    irr::scene::IAnimatedMeshSceneNode* Nperso = sceneManager->addAnimatedMeshSceneNode(perso);
    Nperso->setMaterialTexture(0, driver->getTexture("images/peau.bmp"));
    Nperso->setMaterialFlag(irr::video::EMF_LIGHTING, true);
    Nperso->setPosition(irr::core::vector3df(0.0,5000.0,0.0)) ;


    /* Cube*/ Le cube est au même endroit que le perso pour parenter la caméra au cube mais ce ne doit pas être bon ...

    irr::scene::IAnimatedMesh* cube;
    cube = (irr::scene::IAnimatedMesh*)sceneManager->getMesh("model/cube.X");
    irr::scene::IAnimatedMeshSceneNode* Ncube = sceneManager->addAnimatedMeshSceneNode(cube);
    Nperso->setMaterialTexture(0, driver->getTexture("images/peau.bmp"));

    Ncube->setRotation(irr::core::vector3df(-90.0,0.0,0.0)) ;


//////////////////////////////CAMERA////////////////////////////////////////////////////////////////////////////////////

    irr::scene::ICameraSceneNode *camera3 = sceneManager->addCameraSceneNode();
    camera3->setParent(Ncube);

//////////////////////////////RECEPTEUR EVENNEMENTS//////////////////////////////////////////////////////////////

    CLEventReceiver receiver(Nperso, camera3, playerLastPosition);//On créé un objet instance de la classe CEventReceiver : c'est notre capteur d'évènements
    device->setEventReceiver(&receiver);//on définit cet objet comme le capteur pour notre device
...


//////////////////////////////RENDU////////////////////////////////////////////////////////////////////////////////////

  while (device->run()) {
    driver->beginScene(true, true, irr::video::SColor(0,255,255,255));

    receiver.majPosMesh();
    receiver.majAnimMesh();

    sceneManager->drawAll ();
    driver->endScene ();

 
            //==============================================================//
            //=== Actualisation de la camera                             ===//
            //==============================================================//
            camera3->setTarget(Nperso->getPosition());
            //camera3->setPosition(vector3df(-60,50,0));

  }
  device->drop ();
  return 0;
}

 

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