Bonjour, je suis en train de lire le tuto sur le site du zéro sur le moteur 3d Irrlicht. J'ai vu que le code est un peu "fourre tout" dans la mesure où tout est dans le main.
J'ai donc voulu tester un code qui fait la même chose que dans le tuto en codant "vraiment" en c++ mais ca déconne à l'exécution (xxx.exe à rencontré une erreur et doit fermer...).
Voilà mon code:
main.cpp
#include "Window.h"
using namespace irr;
int main(void)
{
Window *myWindow = new Window();
myWindow->addObject();
myWindow->rend();
return 0;
}
Window.h
#ifndef WINDOW_H_INCLUDED #define WINDOW_H_INCLUDED #include <irrlicht.h> class Window { public: Window(); void addObject(); void rend(); ~Window(); private: irr::IrrlichtDevice *device; irr::video::IVideoDriver *driver; irr::scene::ISceneManager *scenegraph; irr::scene::IAnimatedMesh *modele; }; #endif // WINDOW_H_INCLUDED
Window.cpp
#include "Window.h" #include <iostream> using namespace irr; using namespace std; Window::Window() { IrrlichtDevice *device = createDevice(video::EDT_OPENGL, core::dimension2d<s32>(800, 600), 32, false, true, false, 0); video::IVideoDriver* driver = device->getVideoDriver(); scene::ISceneManager *scenegraph = device->getSceneManager(); } void Window::addObject() { scene::IAnimatedMesh *modele = scenegraph->getMesh("faerie.md2"); scene::IAnimatedMeshSceneNode *Nmodele = scenegraph->addAnimatedMeshSceneNode(modele); Nmodele->setMaterialFlag(video::EMF_LIGHTING, false); Nmodele->setFrameLoop(1, 310); Nmodele->setMaterialTexture(0, driver->getTexture("Faerie5.bmp")); } void Window::rend() { while(device->run()) { driver->beginScene (true, true, video::SColor(0, 200, 200, 200)); scenegraph->drawAll(); driver->endScene(); } } Window::~Window() { device->drop(); }
Si je fourre tout dans le constructeur (en supprimant les fonctions rend et addObject), tout fonctionne sinon ca déconne (comme décrit précédement). Cela prouve que les fichiers existent, aucun problème à ce niveau là (j'ai placé les deux fichiers dans le rep courrant de mon app).
Merci d'avance
Hors ligne
En fait c'est très simple, l'erreur ne vient pas de la façon dont tu emplois Irrlicht, mais de ton code lui même, partie C++.
Tu redéfinis dans ton constructeur tes variable d'environement graphique:
Window::Window() { IrrlichtDevice *device = createDevice(video::EDT_OPENGL, core::dimension2d<s32>(800, 600), 32, false, true, false, 0); video::IVideoDriver* driver = device->getVideoDriver(); scene::ISceneManager *scenegraph = device->getSceneManager(); }
ce qui fait qu'elles sont considérées comme des variables 'locale' et n'alimente en rien les éléments de ta classe.
Il faut donc seulement écrire:
Window::Window() { device = createDevice(video::EDT_OPENGL, core::dimension2d<s32>(800, 600), 32, false, true, false, 0); driver = device->getVideoDriver(); scenegraph = device->getSceneManager(); }
et la cela fonctionne très bien
Dernière modification par morpheusDX (10-06-2008 10:40:46)
Hors ligne
Super, quelle erreur de ...
Merci pour tout
PS: Désolé pour les admins/modos, je ne vois pas de bouton "résolu".
Dernière modification par samsoft (10-06-2008 12:14:03)
Hors ligne
no problem, il y a pas de bouton résolu c'est pour ça
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 5 invités en ligne Aucun membre connecté RSS Feed |