Bonjour,
Je fais des essais depuis pas mal de temps, mais je persiste a avoir des problèmes avec les ILightSceneNode.
Je voudrais créer une source lumineuse qui projette des ombres.
Voila le code qui ajoute une source lumineuse :
SLight light; light.Type = video::ELT_POINT; light.Radius= 850.0f; light.AmbientColor = video::SColorf(1.0f,1.0f,1.0f,1); light.SpecularColor= video::SColorf(0.4f,0.0f,0.0f,1); light.DiffuseColor = video::SColorf(1.0f,1.0f,1.0f,1); light.CastShadows = true; lumiere = smgr->addLightSceneNode(0, vector3df(0, 600, 0), SColorf(1, 1, 1), 1500); lumiere->setLightData(light); lumiere->enableCastShadow(true);
Le code du mesh :
mesh = Interface::getSmgr()->getMesh(cheminMesh.c_str()); node = Interface::getSmgr()->addAnimatedMeshSceneNode(mesh, 0, -1, vector3df(x*20, 0, y*20)); node->setMaterialTexture(0, Interface::getDriver()->getTexture(cheminTexture.c_str())); node->addShadowVolumeSceneNode();
il y a un sol composé de plusieurs mesh plats sous ce dernier, c'est sur celui ci que les ombres devraient être visible.
Lorsque j'enlève la ligne "lumiere->setLightData(light);" le rendu est meilleur, les ombres ne sont pas projetées mais le mesh est noir sur la partie qui n'est pas éclairée.
Dans le cas contraire le mesh prends juste la couleur de la teinte, pas uniformément, mais il est entièrement éclairé.
Autre chose : la lumière semble éclairer les cotés qui devraient être sombres, en changeant la valeur de la lumière ambiante par light.AmbientColor = video::SColorf(1.0f,1.0f,1.0f,1);
j'obtiens :
(Je suis certain des coordonnées, le sol est constitué de IAnimatedMeshSceneNode)
Auriez vous des astuces pour pouvoir projeter les ombres correctement ?
Dernière modification par Kaworu (12-03-2009 19:51:31)
Hors ligne
La lumière ne projette pas d'ombre
Il existe plusieurs techniques pour ça, l'une d'elles utilise le Stencil buffer : http://irrlicht.sourceforge.net/docu/example008.html
Hors ligne