#0 

23-09-2008 20:26:28

dayatch22
Petit nouveau
Date d'inscription: 23-09-2008
Messages: 3

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:

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


#1 

24-09-2008 18:12:39

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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)


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#2 

24-09-2008 22:09:45

dayatch22
Petit nouveau
Date d'inscription: 23-09-2008
Messages: 3

merci pour ta réponse wink. 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


#3 

25-09-2008 10:39:41

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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.


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#4 

25-09-2008 19:21:22

dayatch22
Petit nouveau
Date d'inscription: 23-09-2008
Messages: 3

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


#5 

26-09-2008 08:30:15

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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.


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
881 membres
1426 sujets
11116 messages
Dernier membre inscrit: Bidule
13 invités en ligne
Aucun membre connecté
RSS Feed