Bonjour tous le monde,
C'est jusque que je viens d'un autre site, j'avais poser une question mais je n'est pas eu de réponse.
Mon problème est que j'ai créer (avec l'ai d'un tutoriel) une application Ogre a partir de zéro, tous c'est passer correctement jusque au moment ou j'ai dut créer un InputListener, Donc j'ai créer une classe avec toute les information sur la sourie et le clavier, mais le problème est quand je doit créer la métode createFrameListener() :
il me met ces message d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void AppDemarrage::createFrameListener() { mInputListener = new InputListener(mWindow, mCamera); mRoot->addFrameListener(mInputListener); }
Voici les fichier, sans le main.cpp
AppDemarrage.h
AppDemarrage.cpp
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 #include <Ogre.h> #include "InputListener.h" class AppDemarrage { public: AppDemarrage(); ~AppDemarrage(); bool start(); private: void createScene(); void createFrameListener(); Ogre::Root *mRoot; Ogre::Camera* mCamera; Ogre::SceneManager* mSceneMgr; Ogre::RenderWindow *mWindow; };
InputListener.h
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 #include "AppDemarrage.h" AppDemarrage::AppDemarrage() : mRoot(0) { start(); } void AppDemarrage::createFrameListener() { mInputListener = new InputListener(mWindow, mCamera); mRoot->addFrameListener(mInputListener); } bool AppDemarrage::start() { mRoot = new Ogre::Root("plugins.cfg", "ogre.cfg", "Ogre.log"); Ogre::ConfigFile configFile; configFile.load("resources.cfg"); Ogre::ConfigFile::SectionIterator seci = configFile.getSectionIterator(); Ogre::String secName, typeName, archName; while (seci.hasMoreElements()) { secName = seci.peekNextKey(); Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext(); Ogre::ConfigFile::SettingsMultiMap::iterator i; for (i = settings->begin(); i != settings->end(); ++i) { typeName = i->first; archName = i->second; Ogre::ResourceGroupManager::getSingleton().addResourceLocation( archName, typeName, secName); } } if(!(mRoot->restoreConfig() || mRoot->showConfigDialog())) { return false; } // variante : configuration sans boite de dialogue Ogre::RenderSystem *rs = mRoot->getRenderSystemByName("Direct3D9 Rendering Subsystem"); // Pour OpenGL : "OpenGL Rendering Subsystem" mRoot->setRenderSystem(rs); rs->setConfigOption("Full Screen", "Yes"); rs->setConfigOption("Video Mode", "1600 x 900 @ 32-bit colour"); rs->setConfigOption("VSync", "No"); mWindow = mRoot->initialise(true, "Ogre3D"); Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5); Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); mSceneMgr = mRoot->createSceneManager("DefaultSceneManager", "Mon Scene Manager"); mSceneMgr->setAmbientLight(Ogre::ColourValue(1.0f, 1.0f, 1.0f)); mCamera = mSceneMgr->createCamera("PlayerCam"); mCamera->setPosition(Ogre::Vector3(0,0,100)); mCamera->lookAt(Ogre::Vector3(0,0,0)); mCamera->setNearClipDistance(5); Ogre::Viewport* vp = mWindow->addViewport(mCamera); vp->setBackgroundColour(Ogre::ColourValue(0,0,0)); mCamera->setAspectRatio(Ogre::Real(vp->getActualWidth()) / Ogre::Real(vp->getActualHeight())); Ogre::Entity *ent = mSceneMgr->createEntity("pinguin", "penguin.mesh"); Ogre::SceneNode *node = mSceneMgr->getRootSceneNode()->createChildSceneNode(); node->attachObject(ent); mRoot->startRendering(); createFrameListener(); while(true) { Ogre::WindowEventUtilities::messagePump(); if(mWindow->isClosed()) return false; if(!mRoot->renderOneFrame()) return false; } } void AppDemarrage::createScene() { } AppDemarrage::~AppDemarrage() { OGRE_DELETE mRoot; OGRE_DELETE mCamera; OGRE_DELETE mSceneMgr; OGRE_DELETE mWindow; delete mRoot; }
InputListener.cpp
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 #include <Ogre.h> #include <OIS/OIS.h> class InputListener : public Ogre::FrameListener, public Ogre::WindowEventListener { public: InputListener(Ogre::RenderWindow *wnd, Ogre::Camera *camera); ~InputListener(); private: bool frameRenderingQueued(const Ogre::FrameEvent& evt); void startOIS(); virtual void windowResized(Ogre::RenderWindow* rw); virtual void windowClosed(Ogre::RenderWindow* rw); Ogre::RenderWindow* mWindow; Ogre::Camera* mCamera; OIS::InputManager* mInputManager; OIS::Mouse* mMouse; OIS::Keyboard* mKeyboard; };
Moi j'ai remarquer que d'après ce que j'ai remarquer c'est que dans la classe ExampleApplication il y a tous ce qu'il fallait, mais la rien est ajouter, il faut tout faire sois même, j'ai essayer d'ajouter mInputListener sa enlevait les erreur mais ça ne marchait pas.
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 #include "InputListener.h" InputListener::InputListener(Ogre::RenderWindow *wnd, Ogre::Camera *camera) { mWindow = wnd; mCamera = camera; startOIS(); } bool InputListener::frameRenderingQueued(const Ogre::FrameEvent& evt) { if(mWindow->isClosed()) return false; mKeyboard->capture(); mMouse->capture(); if(mKeyboard->isKeyDown(OIS::KC_ESCAPE)) return false; return true; } void InputListener::startOIS() { Ogre::LogManager::getSingletonPtr()->logMessage("*** Initializing OIS ***"); OIS::ParamList pl; size_t windowHnd = 0; std::ostringstream windowHndStr; mWindow->getCustomAttribute("WINDOW", &windowHnd); windowHndStr << windowHnd; pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str())); mInputManager = OIS::InputManager::createInputSystem( pl ); mMouse = static_cast<OIS::Mouse*>(mInputManager->createInputObject( OIS::OISMouse, false )); mKeyboard = static_cast<OIS::Keyboard*>(mInputManager->createInputObject( OIS::OISKeyboard, false )); windowResized(mWindow); Ogre::WindowEventUtilities::removeWindowEventListener(mWindow, this); } void InputListener::windowResized(Ogre::RenderWindow* wnd) { unsigned int width, height, depth; int left, top; wnd->getMetrics(width, height, depth, left, top); const OIS::MouseState &ms = mMouse->getMouseState(); ms.width = width; ms.width = height; } void InputListener::windowClosed(Ogre::RenderWindow* wnd) { if( wnd == mWindow ) { if( mInputManager ) { mInputManager->destroyInputObject( mMouse ); mInputManager->destroyInputObject( mKeyboard ); OIS::InputManager::destroyInputSystem(mInputManager); mInputManager = 0; } } } InputListener::~InputListener() { Ogre::WindowEventUtilities::removeWindowEventListener(mWindow, this); windowClosed(mWindow); }
Pouvez-vous m'aidez, s'il-vous-plait.
Merci d'avance.
Erwan28250
Partager