Bonjour, j'ai des connaissances assez basiques du C++ et j'ai voulu essayer la methode addAnimatedMeshSceneNode pour me familiariser avec irrlicht seulement voilà, j'arrive à compiler le programme mais apres quand je le lance j'ai un access violation (bug de base).
voici le code que j'utilise pour essayer d'afficher le mesh animé :
... scene::IAnimatedMesh* m = Device->getSceneManager()->getMesh("Anime.MY3D"); Model = Device->getSceneManager()->addAnimatedMeshSceneNode(m); Model->setMaterialFlag(video::EMF_LIGHTING, false); Model->setDebugDataVisible(true); Model->setAnimationSpeed(30); ...
si quelqu'un voit l'erreur et que ça saute aux yeux, merci d'avance
Hors ligne
Salut, essaye avec ça :
scene::IAnimatedMesh* m = Device->getSceneManager()->getMesh("Anime.MY3D"); IAnimatedMeshSceneNode* Model = Device->getSceneManager()->addAnimatedMeshSceneNode(m); Model->setMaterialFlag(video::EMF_LIGHTING, false); Model->setDebugDataVisible(true); Model->setAnimationSpeed(30);
Et contrôle bien que le fichier Anime.MY3D est bien au même endroit que l'executable.
Sinon que dit la console derrière, ça peut aider de savoir ce qu'elle renvoit.
Hors ligne
Je viens de tester ton code, le probleme c'est que le bug semble provenir de l'instruction
scene::IAnimatedMesh* m = Device->getSceneManager()->getMesh("Anime.MY3D");
enfin c'est là que le deboggeur de VC6 se place quand j'ai le violation error.
Le fichier MY3D est bien dans le meme repertoire que le programme et en ce qui concerne la console il affiche la version de irrlicht et la liste des pilotes utilisés (Dx9 et ma carte graphique)
apres il n'y a pas d'erreurs de chargement, si ce n'est le message d'erreur window avec le rapport d'erreurs en hexa
Hors ligne
Tu peux poster la totalité du code ?
Ah et aussi met voir ta config au cas ou.
Hors ligne
#include <irrlicht.h> #include <iostream> using namespace irr; #pragma comment(lib, "Irrlicht.lib") using namespace core; using namespace scene; using namespace video; using namespace io; using namespace gui; IrrlichtDevice *Device = 0; int main() { video::E_DRIVER_TYPE driverType; printf("Please select the driver you want for this example:\n"\ " (a) Direct3D 9.0c\n (b) Direct3D 8.1\n (c) OpenGL 1.5\n"\ " (d) Software Renderer\n (e) Apfelbaum Software Renderer\n"\ " (f) NullDevice\n (otherKey) exit\n\n"); char i; std::cin >> i; switch(i) { case 'a': driverType = video::EDT_DIRECT3D9;break; case 'b': driverType = video::EDT_DIRECT3D8;break; case 'c': driverType = video::EDT_OPENGL; break; case 'd': driverType = video::EDT_SOFTWARE; break; case 'e': driverType = video::EDT_SOFTWARE2;break; case 'f': driverType = video::EDT_NULL; break; default: return 1; } IrrlichtDevice *device = createDevice(driverType, core::dimension2d<s32>(640, 480)); if (device == 0) return 1; // could not create selected driver. video::IVideoDriver* driver = device->getVideoDriver(); scene::ISceneManager* smgr = device->getSceneManager(); // voila la partie sur laquelle je bosse, le chargement d'un objet 3d animé scene::IAnimatedMesh* m = Device->getSceneManager()->getMesh("Anime.MY3D"); IAnimatedMeshSceneNode* Model = Device->getSceneManager()->addAnimatedMeshSceneNode(m); Model->setMaterialFlag(video::EMF_LIGHTING, false); Model->setDebugDataVisible(true); Model->setAnimationSpeed(30); //apres ce qui suis provient directement des tuto de irrlicht smgr->addCameraSceneNodeFPS(); device->getCursorControl()->setVisible(false); int lastFPS = -1; while(device->run()) if (device->isWindowActive()) { driver->beginScene(true, true, video::SColor(0,200,200,200)); smgr->drawAll(); driver->endScene(); int fps = driver->getFPS(); if (lastFPS != fps) { core::stringw str = L"Meta le gros boulet ["; str += driver->getName(); str += "] FPS:"; str += fps; device->setWindowCaption(str.c_str()); lastFPS = fps; } } device->drop(); return 0; }
Voila, je code sous visual C++6 et ma config :
intel M70 (centrino)
Radeon X600 64M dédiées
512 DDR2
Pour info j'arrive a compiler et executer les exemples de irrlicht, donc ma config doit suffir largement (surtout pour charger un MY3D de moins d' 1Mo), de plus le debogueur de VC6 trouve l'endroit où il y a erreur (cité plus haut) mais je ne vois pas ce qui provoque ce bug
Hors ligne
Astroknight :
[
Voila, je code sous visual C++6 et ma config :
intel M70 (centrino)
Radeon X600 64M dédiées
512 DDR2
ey ! j'ai exactement la meme config (sauf pour la ram)
Hors ligne
Alors au début tu as un pointer sur Device ....
IrrlichtDevice *Device = 0;
Puis un autre pointer mais cette fois sur device ...
IrrlichtDevice *device = createDevice(driverType, core::dimension2d<s32>(640, 480));
Et là tu fait ça sur un pointer Device qui est = 0 ça va pas ton truc.
scene::IAnimatedMesh* m = Device->getSceneManager()->getMesh("Anime.MY3D");
IAnimatedMeshSceneNode* Model = Device->getSceneManager()->addAnimatedMeshSceneNode(m);
Remplace les Device-> par des device-> plustôt non ?
Hors ligne
OMG, forcement vu comme ça...
Merci bien, en effet l'erreur viens de là, je n'ai pas encore l'habitude de manipuler les objets de Irrlicht
Hors ligne