Bonjour,
Connaissez-vous un moyen de changer de skybox en cours d'exécution? J'aimerais avoir un skybox (une nuit étoilée) pour la présentation de mon jeu, et un autre skybox (jour, montagnes) pour le jeu comme tel. Je change comment?
Merci!
Sébastien
Hors ligne
A mon avis il faut que tu redéfinisses tes texture dans la boucle principale
exemple
irr::video::ITexture *SkyBoxtop = driver->getTexture ("top.jpg"); irr::video::ITexture *SkyBoxbottom = driver->getTexture ("bottom.jpg"); irr::video::ITexture *SkyBoxleft = driver->getTexture ("left.jpg"); irr::video::ITexture *SkyBoxright = driver->getTexture ("right.jpg"); irr::video::ITexture *SkyBoxfront = driver->getTexture ("front.jpg"); irr::video::ITexture *SkyBoxback = driver->getTexture ("back.jpg"); ISceneNode* SkyDome = smgr->addSkyBoxSceneNode(SkyBoxtop,SkyBoxbottom,SkyBoxleft,SkyBoxright,SkyBoxfront,SkyBoxback,0,-1); int i = 0; while(device->run()) { driver->beginScene(true, true, SColor(0,200,200,200)); if(i != 0) { SkyBoxtop = driver->getTexture ("1.jpg"); SkyBoxbottom = driver->getTexture ("2.jpg"); SkyBoxleft = driver->getTexture ("3.jpg"); SkyBoxright = driver->getTexture ("3.jpg"); SkyBoxfront = driver->getTexture ("3.jpg"); SkyBoxback = driver->getTexture ("3.jpg"); SkyDome = smgr->addSkyBoxSceneNode(SkyBoxtop,SkyBoxbottom,SkyBoxleft,SkyBoxright,SkyBoxfront,SkyBoxback,0,-1); }; smgr->drawAll(); guienv->drawAll(); driver->endScene(); }
et comme sa dès que tu à besoin de changer ta skybox tu mets i à 1
Dernière modification par bestben (01-04-2008 20:13:57)
Hors ligne
Il faut savoir qu'irrlicht gardera en mémoire les textures qui avait été chargé avant.
Sinon je ne vois pas pourquoi charger les textures dans la boucle principale.
Si j'ai bien compris, tu veux juste changer de skybox entre le menu et le démarrage du jeu ?
Dans se cas il suffit simplement de redéfinir les 6 textures au moment ou ta scene change, mais il n'y à aucune utilité à le faire dans la boucle principale. D'autant que si tu copies/colles le code au dessus, Irrlicht tentera de remplacer les textures en boucle d'où une perte de performance....
Au pire si tu veux utiliser se code dans la boucle, fait le avec une variable static du genre :
static bool FirstSky=true; if (FirstSky==true) { //tu redéfini ici ta skybox FirstSky=false;//ici tu mets ta variable à false sinon il va tenter de loader en boucle }
Hors ligne