Salut,
je suis sur un projet de MMORPG et je voudrais faire un brouillard pour que les joueurs ne voient pas les parties pas encore dessinées par irrlicht.
Je ne sais pas trop comment faire.
Pouvez vous m'aider?
Merci d'avance.
Gp2mv3
Hors ligne
Hum j'ai pas bien compris ta question, tu veux dire un brouillard de guerre comme dans les jeux de stratégie ?
Hors ligne
Salut,
Non un brouillard comme si on était dans un nuage.
Je sais pas si tu connais Battlefield 2142, mais la dedans il y a un brouillard comme je voudrais faire.
Bien amicalement.
Gp2mv3
Hors ligne
Je pense que tu l'as déjà vu, mais à tout hasard je le met on sais jamais :
dans la classe driver :
virtual void irr::video::IVideoDriver::setFog ( SColor color = SColor(0, 255, 255, 255), bool linearFog = true, f32 start = 50.0f, f32 end = 100.0f, f32 density = 0.01f, bool pixelFog = false, bool rangeFog = false ) [pure virtual]
C'est ce qu'ils utilisent dans les exemples (si je me souviens bien)
Ca vaut ce que ça vaut...
J'ai pas de lien là-dessus, regarde sur gamedev.net/gamasutra si il y a pas un/des articles là-dessus (je pense que oui) si tu veux un truc plus clean.
plouf
Hors ligne
Salut,
Oui j'avais effectivement déja vu cette fonction mais elle ne convient vraiment pas.
Merci quand même.
Tu as raison, il y a un article ici http://www.gamasutra.com/features/20011003/boyd_01.htm mais il faut etre inscrit, je ne me voit pas m'inscrir juste pour sa alors je vais voir les autres articles de gamedev.
Bien amicalement.
Gp2mv3
Dernière modification par gp2mv3 (18-08-2007 11:15:45)
Hors ligne
Si c'est ce genre de brouillard
C'est driver->setFog() qu'il te faut, tu mets start à 0 et end à 3000. Comme couleur prends celle qui se rapproche le plus de ton sky (sur le screen ça ressemble à du gris 150,150,150.
Les 2 derniers arguments (pixelFog et rangeFog) permettent de bien le faire varier.
Hors ligne
Je vais essayer mais sa veut dire que je dois activer le brouillard sur tous les objets?
Merci d'avance.
Gp2mv3
Hors ligne
nan, la méthode setFog appartient au driver. Tu l'appelles qu'une fois et elle sera active sur tout le sceneManager
Hors ligne
Pas tout à fait izguit, gp2mv3 a raison.
Tu dois spécifier pour chaque objet qui doit en subir l'influence :
node->setMaterialFlag( EMF_FOG_ENABLE , true);
Hors ligne
au temps pour moi
Hors ligne
Ok merci de la réponse je vais essayer sa et je te donnerais des nouvelles.
Bien amicalement.
Gp2mv3
Dernière modification par gp2mv3 (22-08-2007 21:16:16)
Hors ligne
Cette fonction est très pratique mais le problème c'est que sa ne change en rien la skybox.
Je suis en train d'essayer de créer une skybox plus adaptée.
Connaissez vous une solution ?
Bien amicalement.
Gp2mv3
Hors ligne
tuto terragen pour créer des skyboxes rapidement
Une alternative qui peut intéresser: le skydome. Prendre une texture ici
Puis au lieu du classique smgr->addSkyBoxSceneNode() faire un
scene::ISceneNode* sky = smgr->addSkyDomeSceneNode( driver->getTexture("MorningSky_1.jpg"), 30, 8, 0.96f, 1.2f, NULL, -1);
Voir la doc pour les params.
Encore mieux: on peut animer le skydome. Dans la boucle, mettre
core::vector3df rot = sky->getRotation();
rot.Y += 0.001f;
sky->setRotation(rot);
Dernière modification par katsankat (23-08-2007 06:39:32)
Hors ligne
Et tu saurais pas ou trouver des textures de skydome libres?
Merci d'avance.
Gp2mv3
Hors ligne