Bonjour à tous,
Je me permets de revenir rapidement car j'ai un nouveau problème sous Irrlicht : lors de l'ajout d'une lumière ambiante (ainsi que l'ombre sur ma map), j'ai une "seconde" ombre qui apparaît loin derrière la map, au niveau de la projection de mon ombre.
Un screenshot pour vous montrer mon problème :
http://www.zimagez.com/zimage/rendu39.phpLe code source du main :
#include <iostream>
#include <irrlicht.h>
using namespace std;
/* Namespaces pour Irrlicht : */
using namespace irr;
using namespace video;
using namespace core;
using namespace scene;
int main(int argc, char** argv)
{
// On initialise le moteur
cout << "Choix de la resolution de l'ecran : " << endl;
cout << "a. 640*480 - 32 bits " << endl;
cout << "b. 1024*768 - 32 bits " << endl;
IrrlichtDevice* device;
char choix = 0;
cin >> choix;
if (choix == 'a')
device = createDevice(EDT_OPENGL,dimension2d<u32>(1366, 768), 32, true, true, false);
else if (choix == 'b')
device = createDevice(EDT_OPENGL,dimension2d<u32>(1024, 768), 32, false, true, false);
else
exit(0);
// On récupère le gestionnaire de scene
ISceneManager* scenemgr = device->getSceneManager();
scenemgr->setAmbientLight(SColorf(0.5f,0.5f,0.5f,0.5f));
// On récupère le pilote video
IVideoDriver* driver = device->getVideoDriver();
// On met un titre pour notre fenetre
device->setWindowCaption(L"Premier projet Irrlicht");
SKeyMap keyMap[5]; // re-assigne les commandes
keyMap[0].Action = EKA_MOVE_FORWARD; // avancer
keyMap[0].KeyCode = KEY_KEY_Z; // z
keyMap[1].Action = EKA_MOVE_BACKWARD; // reculer
keyMap[1].KeyCode = KEY_KEY_S; // s
keyMap[2].Action = EKA_STRAFE_LEFT; // a gauche
keyMap[2].KeyCode = KEY_KEY_Q; // q
keyMap[3].Action = EKA_STRAFE_RIGHT; // a droite
keyMap[3].KeyCode = KEY_KEY_D; // d
keyMap[4].Action = EKA_JUMP_UP; // saut
keyMap[4].KeyCode = KEY_SPACE; // barre espace
scenemgr->addCameraSceneNodeFPS( // ajout de la camera FPS
0, // pas de noeud parent
100.0f, // vitesse de rotation
0.01f, // vitesse de deplacement
-1, // pas de numero d'ID
keyMap, // on change la keymap
5); // avec une taille de 5
// On ajoute une map à la scene :
IAnimatedMesh *room = scenemgr->getMesh("media/MAP.obj");
IAnimatedMeshSceneNode *nRoom = scenemgr->addAnimatedMeshSceneNode(room);
scenemgr->getMeshManipulator()->makePlanarTextureMapping(room->getMesh(0), 1.0f);
nRoom->setScale(vector3df(4,4,4));
nRoom->setMaterialFlag(EMF_LIGHTING, true);
// Ajout d'une lumière diffuse :
ILightSceneNode *lumiere = scenemgr->addLightSceneNode();
ILightSceneNode *lumiere2 = scenemgr->addLightSceneNode();
lumiere->setRadius(5000);
lumiere2->setRadius(5000);
lumiere->setPosition(vector3df(500,200,250));
lumiere2->setPosition(vector3df(-50,200,5));
nRoom->addShadowVolumeSceneNode();
scenemgr->setShadowColor(SColor(150,0,0,0));
// Ajout du Skydome :
ISceneNode *ciel = scenemgr->addSkyDomeSceneNode(driver->getTexture("media/Skydome/Skydome.jpg"));
// On lance la boucle de rendu
while(device->run())
{
driver->beginScene(true, true, SColor(255,128,128,255));
scenemgr->drawAll();
driver->endScene();
}
device->drop();
return 0;
}
J'ai remarqué que l'erreur se produit lorsque j'utilise la fonction addLightSceneNode(). N'ayant pas trouvé mon bonheur sur google, j'espère que je le trouverai ici..
PS : Je tiens à préciser que je me remets sur Irrlicht depuis un peu plus d'une semaine, lors de mon temps libre.. Donc certains éléments ont été oubliés.
Merci d'avance.