Pages: 1
Bonjour à tous,
J'ecris ce sujet car j'ai un souci avec mon programme. J'utilise une image .3ds deja texturé et éclairé (je crois). Mais toutes les formes en noir avec ma lumière ambiante. Et lorsque je tente une lumière diffuse les formes s'affichent en bleu pour celles qui sont à la lumiere, voici mon code:
#include "Graphics_engine.h" using namespace irr; Graphics_engine::Graphics_engine(){ //Cette ligne va créer un contexte d'affichage OpenGL IrrlichtDevice *device = createDevice (video::EDT_OPENGL, core::dimension2d<s32>(800,600),32,true,true,false,0); //On associe un driver à la fenêtre video::IVideoDriver* driver = device->getVideoDriver (); //Et on crée un gestionnaire de scène (scenegraph) scene::ISceneManager *scenegraph = device->getSceneManager (); device->getCursorControl()->setVisible(false); // // // // La caméra // // // // scene::ICameraSceneNode *camera = scenegraph->addCameraSceneNodeFPS (0,80.0f,100.0f); camera->setPosition(core::vector3df(10.0, 50.0, -50.0)); // // // // la salle // // // // scene::IAnimatedMesh *room = scenegraph->getMesh("florence.3ds"); scene::ImeshSceneNode *Nroom = scenegraph->addMeshSceneNode(room->getMesh(0)); Nroom->setMaterialFlag(video::EMF_LIGHTING, true); // On applique une texture à la salle. scenegraph->getMeshManipulator()->makePlanarTextureMapping( room->getMesh(0), 0.004f); Nroom->setMaterialTexture( 0, driver->getTexture("rockwall.bmp") ); // // // // la lumière // // // // scenegraph->setAmbientLight(video::SColorf(1.0, 1.0, 1.0,30.0)); // scenegraph->addLightSceneNode (0, core::vector3df(0,0,0), video::SColorf(0.4f,0.4f,0.6f,0.0f), 100000.0f); //} //void Graphics_engine::run(){ isrun=true; while (device->run ()) { //On indique qu'on démarre la scène driver->beginScene (true, true, video::SColor (255,255,255,255)); //On calcule le rendu scenegraph->drawAll (); //On affiche le rendu à l'écran driver->endScene (); } }
merci d'avance j'ai au préalable cherché un sujet deja édité qui puisse m'aider mais je n'ai rien trouvé
Hors ligne
Pour le bleu c normal car SColorf est en ARVB et non en RVBA comme de normale. Ton 30.0f représente la valeur du bleu. Pour un éclairage correct, utilise
Nroom->setMaterialFlag(EMF_NORMALIZE_NORMALS, true); comme ca se sera "lissé". Normalement ca devrait resoudre ton probleme.
Dernière modification par johnplayer (24-09-2008 18:14:02)
Hors ligne
merci pour ta réponse . j'ai essayé les lignes de code que tu m'as transmis mais le resultat est le meme. Quand je met juste la lumiere ambiante tout mes objets apparaissent en noir et quand je met la lumiere ambiante tout est bleu meme en changeant la valeur 30 et en la remplaçant par 1. Est ce que cela pourrait venir de probleme de conception en 3ds max?
Je précise qu'avec la room.3ds qui est dans les exemples de Irrlicht je n'ai pas ces problèmes avec le meme code
Dernière modification par dayatch22 (24-09-2008 22:15:29)
Hors ligne
Moi j'utilise 3ds max 9 (et le 6 avant) je n'ai jamais eu de problème sauf lorsque je texturais les objets dans 3ds max avant de les exporter (au format 3ds bien sûr).
1/ essaie : Nroom->setMaterialFlag(video::EMF_LIGHTING, false); pour vérifier que ton mesh soit correctement texturé. S'il est correctement texturé c'est que ca vient de la lumière.
2/ Et je viens de m'apercevoir d'un problème! N'utilise pas setAmbientelight, il me semble qu'elle ne marche pas!
Utilise plutot les propriétés SLight :
ILightSceneNode * lumiere1 = smgr->addLightSceneNode(); // créé une lumière
lumiere1->setPosition(vector3df(300,190,850)); // position de la lumiere dans world
lumiere1->getLightData().CastShadows = true; // projette des ombres
lumiere1->getLightData().Type = ELT_POINT; // lumière omnidirectionnelle (par défaut mais là c'est pour l'exemple)
Dans la doc c'est namespace > VideoDriver > SLight.
Hors ligne
Encore merci. J'ai comme tu me l'as conseillé desactivé la sensibilité à l'éclairage de florence et plus rien ne s'affiche tout est blanc quand je ne mets pas de texture codé en C.
Si je mets le code de la lumiere que tu m'as donné et que je reactive la sensibilité (toujours sans codé de textures en C, le but étant de recupérer celles de 3ds max)
alors une moitié de mon décor est éclairé mais il n'y a pas de texture (il y a un gris) et l'autre moitié est toute noire. Mais ça passe du gris au noir brutalement par exemple un mur est eclairé mais le sol devant absolument pas, est ce juste un probleme d'orientation de ma lumiere? Sinon Je voulais utiliser les textures de 3ds max avant export. Ton dernier message semble dire que sous ce format ce n'est pas possible, c'est le cas? Je dois donc exporter dans un autre format?
Désolé avec toutes mes questions
Dernière modification par dayatch22 (25-09-2008 19:46:00)
Hors ligne
Il faut appliquer la texture avec ->setMaterialTexture sinon ta texture soit elle n'apparaitra pas soit elle sera blanchie (je me demande pourquoi d'ailleur). En tout cas, le mieux est de ne pas texturer dans 3ds max (comme ca irrlicht ne recherche pas de texture a partir du 3ds) mais juste faire UVWMap et après tu mets une texture sur ton mesh dans irrlicht. Sinon tu exporte en .obj, l'avantage est que les .obj garde la position du mesh dans la scene et tu peux choisir de ne pas exporter les textures.
Hors ligne
Pages: 1
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 88 invités en ligne Aucun membre connecté RSS Feed |