Salutations !
J'ai un petit problème...
Je voudrais afficher des lignes en 3d sous irrlicht. Alors je regarde dans les démos et autres exemples, compulse l'aide en .chm d'irrlicht et vois que ça ne devrais pas poser de blèmes, et pourtant si...
Je voulais afficher des lignes qui relient des systèmes entre eux, pour en faire des constellation, histoire d'agrémenter un peu la vue 3d et permettre un repérage visuel plus attractif. Il y a bien le beamnode des extensions, mais il pose un gros problème : il empêche la sélection des systèmes se trouvant derrière lui a cause de son enveloppe qui est une box3d ayant ses sommets opposés au niveau des extrémités du beam...
J'ai essayé les line3d, mais.... Quoi que je fasse, elles s'affichent en noir, quand elles s'affichent.
Une solution ?
Hors ligne
as-tu essayé de creer un material, régler ses couleurs difus ambient et co puis d'appliquer se material au driver avant le rendu de tes lignes 3D ?
Hors ligne
Ben....Heuu...... Non. (se sent con, la....)
Vais essayer ça.
Hors ligne
Salut, essaye ça
#include <irrlicht.h> using namespace irr; using namespace core; using namespace video; using namespace scene; void Dessiner_Ligne(IVideoDriver* driver, core::vector3df from, core::vector3df to, SColor couleur ) { matrix4 mat; SMaterial material; material.Texture1 = 0; material.Lighting = false; driver->setTransform(ETS_WORLD, mat); driver->draw3DLine(from, to, couleur); } int main(int argc, char **argv) { IrrlichtDevice* device = createDevice(EDT_OPENGL, dimension2d<s32>(400, 400), 32, false, false, false); if (!device) return 1; IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); // [cam] scene::ICameraSceneNode* cam; cam = smgr->addCameraSceneNodeFPS(0,100.0f,200.0f); cam->setPosition(core::vector3df(-200, 100, -200)); cam->setTarget(core::vector3df(0,00,0)); device->getCursorControl()->setVisible(false); // [Light] ILightSceneNode* pLight = device->getSceneManager()->addLightSceneNode(); SLight &l = pLight->getLightData(); l.Type = ELT_DIRECTIONAL; ISceneNode* pNode = device->getSceneManager()->addEmptySceneNode(); pLight->setPosition(vector3df(0,1,1)); pLight->setParent(pNode); // [Empty nodes pour relier les lignes] ISceneNode* a[4]; irr::gui::IGUIFont* font = device->getGUIEnvironment()->getBuiltInFont(); for (int n=0; n<4; n++) { a[n] = device->getSceneManager()->addEmptySceneNode(); core::stringw str(L"Noeud "); str +=n; smgr->addTextSceneNode(font, str.c_str(), video::SColor(255,0,140,0), a[n]); a[n]->setPosition(core::vector3df(20*n,30*n,40*n)); } // [main loop] while (device->run()) { driver->beginScene(true, true, SColor(255, 40, 40, 40)); smgr->drawAll(); core::vector3df pos = a[1]->getPosition(); pos.X++; if (pos.X>100) pos.X =-100; a[1]->setPosition(pos); for (int n=1; n<4; n++) Dessiner_Ligne (driver, a[n]->getPosition(), a[n-1]->getPosition(), SColor(255,n*50,n*50,n*50)); driver->endScene(); } device->drop(); return 0; }
Hors ligne
merci katsankat, j'avais moi aussi eu des problèmes a avec ca,
Hors ligne
MERCI BEAUCOUP !
Vais tester ça de suite !
Hors ligne
Désolé j'ai posté du code C++ ... Je n'avais pas vu... Le concept devrait être le même cependant.
Hors ligne
Ben, je doit vraiment être nul, parce que j'ai beau essayer de l'adapter, marche pas...
J'ai un doute, faut que je regarde et dès que j'ai la soluce, je poste.
Hors ligne
Bon, ben... La solution était sur le site de DeusXL :
Voici l'adresse du topic : http://irrlichtnetcp.sourceforge.net/ph … c.php?t=26
Material mat = new Material(); mat.BackfaceCulling = false; while(... render loop ...) Driver.Begin Driver.SetMaterial(mat); Driver.DrawTriangle Driver.End
Mais chez moi cela ne fonctionne que si je place ce code en dernier avant le end.
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 28 invités en ligne Aucun membre connecté RSS Feed |