Historique des modifications - Message

Message #4351

Sujet: déplacer un cube :p


Type Date Auteur Contenu
Création du message 26-06-2008 11:47:05 Glaucos
Merci à vous deux pour vos réponses.

noals->j'ai regardé ton lien je suppose que ça marche mais je n'ai pas testé car ça marchait déjà.

dark_calculator->en effet désolé de ne pas avoir regardé avant

J'ai repris le code de nilska(voir topic rotation / déplacement) et l'ai modifié selon les besoins de mon modèle et de mes attributs.

Ma classe donne ça au final:

#ifndef IR_EVENTRECIEVER
#define IR_EVENTRECEIVER

#include <iostream>
#include <IRR/irrlicht.h>

using namespace std;

using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

class IR_EventReceiver : public IEventReceiver
{
    public:

    IR_EventReceiver(ISceneNode *Nmodele)
    {
        m_Nmodele = Nmodele;

        for(int i = 0; i < 4; i++)
        {
        m_isMoving[i] = false;
        }
    }

    virtual bool OnEvent(const SEvent &event) //capte les événements et met à jour les attributs
    {
        if(m_Nmodele != 0 && event.EventType == EET_KEY_INPUT_EVENT)
        {
            switch (event.KeyInput.Key)
            {
                case KEY_KEY_Z:
                m_isMoving[AVANT] = event.KeyInput.PressedDown;
                return true;

                case KEY_KEY_S:
                m_isMoving[ARRIERE] = event.KeyInput.PressedDown;
                return true;

                 case KEY_KEY_Q:
                m_isMoving[GAUCHE] = event.KeyInput.PressedDown;
                return true;

                 case KEY_KEY_D:
                m_isMoving[DROITE] = event.KeyInput.PressedDown;
                return true;
            }
        }


        return false;
    }

    void manageEvents() //gère les événements
    {
        matrix4 Mat;
        vector3df v = m_Nmodele->getPosition();
        vector3df r = m_Nmodele->getRotation();

        if (m_isMoving[AVANT])
        {
            r.Y += 90;
            Mat.setRotationDegrees(r);
            vector3df Target(5,0,0);
            Mat.transformVect(Target);
            vector3df NewPos = m_Nmodele->getPosition();
            NewPos += Target;
            m_Nmodele->setPosition(NewPos);
        }

        else if (m_isMoving[ARRIERE])
        {
            r.Y += 90;
            Mat.setRotationDegrees(r);
            vector3df Target(-2,0,0);
            Mat.transformVect(Target);
            vector3df NewPos=m_Nmodele->getPosition();
            NewPos += Target;
            m_Nmodele->setPosition(NewPos);
        }

        if (m_isMoving[GAUCHE])
        {
            r.Y -= 3;
            m_Nmodele->setRotation(r);

        }

        else if (m_isMoving[DROITE])
        {

            r.Y += 3;
            m_Nmodele->setRotation(r);
        }

    }

    private:

    enum {AVANT, ARRIERE, GAUCHE, DROITE}; //directions du modèle
    bool m_isMoving[4]; //tableau de bool pour connaître la direction du mouvement
    ISceneNode *m_Nmodele; //le scene node auquel on applique la gestion des événements
};

#endif

Il manque une chose pour que le programme fonctionne pleinement: il faut que la caméra suive le modèle dans ses rotations et déplacements:

je suis allé fouiner dans la doc:

&quot;doc&quot; Ecris:

virtual ICameraSceneNode* irr::scene::ISceneManager::addCameraSceneNodeFPS ( ISceneNode * parent = 0,
f32 rotateSpeed = 100.0f,
f32 moveSpeed = 500.0f,
s32 id = -1,
SKeyMap * keyMapArray = 0,
s32 keyMapSize = 0,
bool noVerticalMovement = false,
f32 jumpSpeed = 0.f
) [pure virtual]

Parameters:
parent,: Parent scene node of the camera. Can be null.

donc j'ai déclaré ma caméra ainsi dans le main: ICameraSceneNode *camera = sceneManager->addCameraSceneNodeFPS(Nf50);

ça marche mais je me retrouve au centre du modele :p
J'ai essayé d'initialiser la caméra à une position donnée mais dès que l'on bouge le modèle elle se place au centre de celui-ci.

On peut faire à chaque tour de boucle:

camera->setTarget(Nf50->getPosition());

mais ça ne résout pas le problème du placement à l'arrière du mesh.

Voilà y à t-il moyen de toujours placer la caméra derrière le model autrement qu'en testant la rotation de celui-ci (ce qui serait d'ailleurs lourd et peu agréable à utiliser) ?

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