IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ogre Discussion :

Ogre et OIS, Mouse et Keyboard Listener


Sujet :

Ogre

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Ogre et OIS, Mouse et Keyboard Listener
    Bonjour a tous je debute avec ogre et j'ai rencontrer un probleme avec la gestion des evenements clavier et souris.
    Avant je n'avait aucun probleme sans la bufferisation de l'input mais je voudrai l'esseyer et elle ne marche pas : mes fonction de callback ne sont jamais appeler. Voici un code simpliste pour illustrer le probleme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
     
    #include <Ogre.h>
    #include <OIS/OIS.h>
    #include <windows.h>
    using namespace Ogre;
     
     
    class Application : public Ogre::FrameListener, public OIS::MouseListener, public OIS::KeyListener
    {
        public:
        Root* pRoot;
        RenderWindow* pRenderWindow;
        SceneManager* pSceneManager;
        Camera* pCamera;
        Viewport* pViewport;
        OIS::InputManager* pInputManager;
        OIS::Mouse *pMouse;
        OIS::Keyboard *pKeyboard;
        Entity* pEntity;
        SceneNode* pNode;
        AnimationState* pAnimationState;
     
        public:
    Application()
    {
        pRoot = new Ogre::Root();
     
        if(!pRoot->restoreConfig())
        {
            if(!pRoot->showConfigDialog())
            {
            }
        }
        pRenderWindow=pRoot->initialise(true,"test app 3d");
        pSceneManager=pRoot->createSceneManager(ST_GENERIC,"MonGestionnaireDeScene");
        pCamera = pSceneManager->createCamera("MaCamera");
        pCamera->setPosition(Ogre::Vector3(0,0,300));
        pCamera->lookAt(Ogre::Vector3(0,0,0));
        pViewport = pRenderWindow->addViewport(pCamera);
     
        OIS::ParamList pl;
        size_t windowHnd = 0;
        std::ostringstream windowHndStr;
        pRenderWindow->getCustomAttribute("WINDOW", &windowHnd);
        windowHndStr << windowHnd;
        pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
        pInputManager = OIS::InputManager::createInputSystem( pl );
     
    //ici
     
        pKeyboard = static_cast<OIS::Keyboard*>(pInputManager->createInputObject(OIS::OISKeyboard, false));
        pMouse = static_cast<OIS::Mouse*>(pInputManager->createInputObject(OIS::OISMouse, false));
     
        pMouse->setEventCallback(this);
        pKeyboard->setEventCallback(this);
           pRoot->addFrameListener(this);
     
    Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../../media/models","FileSystem","General");
    Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../../media/materials/scripts","FileSystem","General");
     Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../../media/materials/textures","FileSystem","General");
      Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../../media/materials/programs","FileSystem","General");
     
        Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
     
        pEntity = pSceneManager->createEntity( "Robot1", "robot.mesh" );
        pNode = pSceneManager->getRootSceneNode()->createChildSceneNode("Robot1Node", Vector3(0, -70, 0));
        pNode->attachObject(pEntity);
        pAnimationState = pEntity->getAnimationState("Idle");
        pAnimationState->setEnabled(true);
        pAnimationState->setLoop(true);
    }
     
    ~Application()
    {
        delete pRoot;
    }
     
    void run()
    {
        pRoot->startRendering();
    }
     
     
    bool frameStarted(const FrameEvent & evt)
    {
        Sleep(1);
        pAnimationState->addTime(evt.timeSinceLastFrame);
        if(pMouse)
            pMouse->capture();
        if (pKeyboard)
            pKeyboard->capture();
        return true;
    }
     
    bool mouseMoved(const OIS::MouseEvent &e)
       {
            return true;
       }
     
    bool mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id)
        {
            return true;
        }
     
    bool mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id)
        {
            return true;
        }
     
    bool keyPressed(const OIS::KeyEvent &e)
    {
        exit(0);
        return true;
    }
     
    bool keyReleased(const OIS::KeyEvent &e)
    {
        return true;
    }
     
        bool frameEnded(const FrameEvent& evt)
    {
        return true;
    }
    };
     
    #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
    #define WIN32_LEAN_AND_MEAN
    #include "windows.h"
    #endif
     
    #ifdef __cplusplus
    extern "C" {
    #endif
     
    #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
    INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
    #else
     
    int main(int argc, char *argv[])
     
    #endif
     
    {
     
    try
    {
    Application app;
    app.run();
    }
    catch( Ogre::Exception& e )
    {
    #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
    MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
    #else
    std::cerr << "An exception has occured: " << e.getFullDescription().c_str() << std::endl;
    #endif
    }
    return 0;
     
    }
    #ifdef __cplusplus
    }
     
    #endif

    voila le but est de quitter le programme sur un keyPressed ce qui n'arrive jamais, la fonction n'est pas appeler, ou est le probleme dans ce code ? merci d'avance

  2. #2
    Nouveau Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bon je débute aussi avec Ogre mais je crois avoir lu qque part que pour utiliser les evennements comme tu souhaite le faire, il faut remplacer ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    pKeyboard = static_cast<OIS::Keyboard*>(pInputManager->createInputObject(OIS::OISKeyboard, false));
    pMouse = static_cast<OIS::Mouse*>(pInputManager->createInputObject(OIS::OISMouse, false));
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    pKeyboard = static_cast<OIS::Keyboard*>(pInputManager->createInputObject(OIS::OISKeyboard, true));
    pMouse = static_cast<OIS::Mouse*>(pInputManager->createInputObject(OIS::OISMouse, true));
    Voila, je suis pas certain que ca résolve ton pb et j'suis pas sûr de mon coup non plus, mais bon j'aurais essayé ... Et si j'ai dit n'importe quoi, je m'en excuse d'avance

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    merci c'etait bien ca : )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Keyboard listener ou hotkey pour un menu
    Par dbarkats dans le forum GWT et Vaadin
    Réponses: 0
    Dernier message: 08/06/2010, 11h33
  2. Ogre et OIS, Mouse Listener
    Par chistophe dans le forum Ogre
    Réponses: 3
    Dernier message: 12/04/2010, 10h04
  3. une exception dans un mouse listener
    Par krikri1504 dans le forum Débuter
    Réponses: 3
    Dernier message: 30/10/2008, 13h12
  4. Quel mouse listener utiliser ?
    Par icicmoi dans le forum Composants
    Réponses: 15
    Dernier message: 07/08/2008, 16h08
  5. Ajouter un listener mouse a jtabbedpane
    Par opensource dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 22/02/2008, 17h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo