Pages: 1
- Accueil forums
- » Lumières
- » Création d'une lampe sur la caméra (lumière)
15-01-2010 12:53:43
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 79.85.248.174
- Courriel
Bonjour,
Je découvre le moteur irrlicht et j'ai plutôt du mal à gérer l'éclairage, j'ai fait un petit FPS tout simple avec une caméra et le joueur se déplace dans un labyrinthe en 3d, le programme gére les collisions de la map, le principe est que le décors soit plutot sombre pour que je puisse fixer une lampe dans la main du personnage du joueur, le probleme c'est que je n'ai aucune idée de comment m'y prendre pour faire la lampe .
Quelqu'un peut m'aider svp ?
Hors ligne
15-01-2010 13:30:22
- firnafin
- Membres

- Date d'inscription:
- Messages: 150
- IP: 93.9.159.197
- Courriel
irr::scene::ILightSceneNode* lampe = scenemanager->addLightSceneNode(camera);
lampe->setLightType(irr::video::ELT_SPOT);
lampe->getLightData().OuterCone = 40.0f;Tout est on ne peut plus claire dans la documentation.Ne pas oublier
map->setMaterialFlag(irr:video::EMF_LIGHTING,true);Hors ligne
15-01-2010 16:01:31
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 79.85.248.174
- Courriel
Je trouve pas que çà éclaire beaucoup c'est normale ?
Hors ligne
15-01-2010 16:10:15
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 79.85.248.174
- Courriel
Je te remercie grandement pour ton aide au passage pour la question précédente j'était juste qu'en plus de ce que tu m'a di il falait replacer la lampe par raport à la caméra :
lampe->setPosition(irr::core::vector3df(-50.0,-50.0,600.0));
Hors ligne
15-01-2010 16:54:23
- firnafin
- Membres

- Date d'inscription:
- Messages: 150
- IP: 93.15.61.195
- Courriel
jouer sur la position pour regler l'intensité c'est un peut domage car l'éclairage ne sera pas realiste ( -50,-50,600 : la lampe a droite de joueur ( la cam ) au dessu et loin derriere ) , joue sur le parametre getLightData().Fallof , getLightData().Ambientcolor ( mettre plus prés de 0,0,0 pour un limiere moins spot 5000W ) and getLightData().Attenuation le shininess de la map peut aussi intervenir.
Hors ligne
15-01-2010 18:34:09
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 79.85.248.174
- Courriel
irr::scene::ILightSceneNode* lampe = sceneManager->addLightSceneNode(camera); // on met une lampe sur la caméra
lampe->setLightType(irr::video::ELT_SPOT);
lampe->getLightData().OuterCone = 540.0f;
lampe->getLightData().Fallof ;
lampe->getLightData().Ambientcolor(0,0,0);
lampe->getLightData();
Sans te mentir les 3 derniéres lignes me posent probleme çà ne compile pas il manque surement des truc mes bon j'ai beau gratter rien ne passe !
Hors ligne
15-01-2010 20:35:19
- firnafin
- Membres

- Date d'inscription:
- Messages: 150
- IP: 93.15.61.195
- Courriel
Hors ligne
15-01-2010 20:43:13
- Magun
- Administrateurs

- Date d'inscription:
- Messages: 910
- IP: 188.93.45.30
- Courriel Site web
personelement je procède ainsi ...
Code c++ :
irr::scene::ILightSceneNode* lampe = sceneManager->addLightSceneNode(camera); // on met une lampe sur la caméra
lampe->setLightType(irr::video::ELT_SPOT);
video::SLight lightData = lampe->getLightData();
lightData.OuterCone = 540.0f;
lightData.Ambientcolor(0,0,0);
lampe->setLightData(lightData);
étant donné que "lampe->getLightData()" ne retourne pas un pointeur je lui renvoie après modification
edit : oui pas mal aussi le lien ...
il aurais peut-être falue que je commence par la :-°
Hors ligne
15-01-2010 21:59:16
- firnafin
- Membres

- Date d'inscription:
- Messages: 150
- IP: 93.15.61.195
- Courriel
C'est plus un probleme de comprehension du language cpp que d' irrlicht.Il vaut mieu etre au point sur les notions de base pour comprendre la doc d'ou l'utilité de www.developpez.com ![]()
Hors ligne
16-01-2010 21:39:32
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 79.85.248.174
- Courriel
Merci de m'accorder vôtre aide mais bon je suis pas un pro
J'ai deux erreurs :
lightData.Ambientcolor(0,0,0);
error: 'struct irr::video::SLight' has no member named 'Ambientcolor'
setLightData(lightData);
error: 'setLightData' was not declared in this scope
J'ai regardais la doc et j'ai assai de mal à comprendre :S
Hors ligne
16-01-2010 22:08:51
- nico
- Administrateurs

- Date d'inscription:
- Messages: 563
- IP: 82.232.128.163
- Courriel
jonath313 Ecris:
lightData.Ambientcolor(0,0,0);
error: 'struct irr::video::SLight' has no member named 'Ambientcolor'
'Ambientcolor' n'existe pas
jonath313 Ecris:
setLightData(lightData);
error: 'setLightData' was not declared in this scope
'setlightData' appartient à une classe
Hors ligne
17-01-2010 11:20:45
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 79.85.248.174
- Courriel
Code c++ :
irr::scene::ILightSceneNode* lampe = sceneManager->addLightSceneNode(camera); // on met une lampe sur la caméra
lampe->setLightType(irr::video::ELT_SPOT);
lampe->getLightData().OuterCone = 540.0f;
video::SLight lightData = lampe->getLightData();
lampe->setLightData(lightData);
voila j'ai fait de l'ordre la dedans mais il doit manquer quelque chose car je n'ai toujours pas d'éclairage ?
Hors ligne
17-01-2010 16:41:52
- X3liF
- Membres
- Date d'inscription:
- Messages: 19
- IP: 86.77.198.118
- Courriel
dans la documentation il est spécifié
"http://irrlicht.sourceforge.net/docu/namespaceirr_1_1video.html#af0e02f6f83cc35cf9e764bf18400d39" Ecris:
ELT_SPOT spot light, it has a position in space, a direction, and a limited cone of influence
je ne vois que la l'angle du outtercone faut pas régler le Inner aussi?
à moins que je ne me trompe (j'ai as fait joujou avec les lumières pour le moment), placer la lumière comme fille du noeuf caméra n'implique pas qu'elle éclaire devant celle ci... ( à moins que ca soit les paramètres par défaut du spot )
ensuite sur la structure SLight, tu n'as pas rajouté les paramètres de couleur de la lumière : AmbientColor, DiffuseColor, et SpecularColor si ca e trouve t'a lampe est éteinte ( elle éclaire en noir )
de plus ton code ne modifie pas la lightdata
video::SLight lightData = lampe->getLightData();
// modification des paramètres de la lampe
lghtData.OuterCone = 540.0f;
//envoie des paramètres à la lampe
lampe->setLightData(lightData);fais toutes tes modifs sur le lightData que tu renvoies après sinon ca sert à rien
Hors ligne
17-01-2010 20:26:57
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 195.221.123.215
- Courriel
Bon après avoir retournée la doc dans tout les sens j'ai fait cela :
// La lampe a la main
irr::scene::ILightSceneNode* lampe = sceneManager->addLightSceneNode(camera); // on met une lampe sur la caméra
video::SLight lightData = lampe->getLightData();
// modification des paramètres de la lampe
lampe->setLightType(irr::video::ELT_SPOT);
lampe->getLightData().OuterCone = 200.0f;
lampe->getLightData().InnerCone = 0.0f;
lampe->getLightData().Falloff = 100.0f;
lampe->getLightData().Radius = 100.0f;
lampe->getLightData().SpecularColor= SColor(0,25,25,25);
lampe->getLightData().DiffuseColor= SColor(0,100,100,100);
lampe->setPosition(irr::core::vector3df(0.0f,0.0f,600.0f));
//envoie des paramètres à la lampe
lampe->setLightData(lightData);
Beaucoup de paramètres pour une simple lampe ! enfin bref le résultat ne me convient pas je sais même pas si ce que j'ai fait peut être appelé de la lumière sachant que çà n'éclaire casiment rien, je vois pas où j'ai put me planter dans quel valeur.
En plus il y a un moyen de jouer sur la direction du spot et j'arrive pas à m'en servir !
J'ai vraiment du mal ...
Hors ligne
19-01-2010 19:56:46
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 195.221.123.215
- Courriel
Est-ce que quelqu'un peut m'orienter car sa fait un moment que je gratte et franchement je trouve pas :S
Hors ligne
19-01-2010 20:43:45
- firnafin
- Membres

- Date d'inscription:
- Messages: 150
- IP: 93.9.158.129
- Courriel
tu fournis a setLightData un lightData qui na meme pas etait modifier , regarde ton code un peut :
en resumé ce que tu fait :
video::SLight lightData = lampe->getLightData();
...
...
...
lampe->setLightData(lightData);on a connu plus utile
Hors ligne
19-01-2010 21:52:52
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 195.221.123.215
- Courriel
// La lampe a la main
irr::scene::ILightSceneNode* lampe = sceneManager->addLightSceneNode(camera); // on met une lampe sur la caméra
// modification des paramètres de la lampe
lampe->setLightType(irr::video::ELT_SPOT);
lampe->getLightData().OuterCone = 6000.0f;
lampe->getLightData().InnerCone = 1000.0f;
lampe->getLightData().Falloff = 0.0f;
lampe->getLightData().Radius = 100.0f;
lampe->setPosition(irr::core::vector3df(0.0f,0.0f,600.0f));
lampe->setRotation(irr::core::vector3df(0.0,0.0,-90.0)) ;
//envoie des paramètres à la lampe
video::SLight lightData = lampe->getLightData();
lampe->setLightData(lightData);
Voila est-ce que j'ai corrigé mon erreur ?
Par contre si c'est cela je dois mal régler mes paramètres car c'est vraiment pas trés lumieu !
Merci encore de vôtre patience
"c'est en forgeant qu'on devient forgeront"
Hors ligne
20-01-2010 13:21:25
- firnafin
- Membres

- Date d'inscription:
- Messages: 150
- IP: 93.9.158.129
- Courriel
lampe->setPosition(irr::core::vector3df(0.0f,0.0f,600.0f)); ta lampe est 600 pas derriere.
lampe->getLightData().OuterCone = 6000.0f; c'est l'angle du cone exterieur : ca doit etre un angle. mettre 45 par exemple;
lampe->getLightData().InnerCone = 1000.0f; idem mettre 0.
un fois de plus ca :
video::SLight lightData = lampe->getLightData();
lampe->setLightData(lightData);
c'est inutile
lampe->setRotation(irr::core::vector3df(0.0,0.0,-90.0)) ; par defaut le spot "regarde" la direction Z+ , comme la camera donc c'est inutile.
Hors ligne
21-01-2010 17:38:31
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 79.85.248.174
- Courriel
ok merci de votre aide ![]()
Hors ligne



