#0 

22-02-2007 16:06:26

diOxy
Abonné
Date d'inscription: 10-10-2006
Messages: 153

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


#1 

22-02-2007 21:36:39

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

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 ?


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#2 

23-02-2007 12:19:13

diOxy
Abonné
Date d'inscription: 10-10-2006
Messages: 153

Ben....Heuu...... Non.  (se sent con, la....)
Vais essayer ça.

Hors ligne


#3 

24-02-2007 11:01:32

katsankat
Membre
Date d'inscription: 24-02-2007
Messages: 43

Salut, essaye ça

Code:

#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


#4 

24-02-2007 19:12:16

Jerry Kan
Habitué
Date d'inscription: 21-11-2006
Messages: 265

merci katsankat, j'avais moi aussi eu des problèmes a avec ca,

Hors ligne


#5 

25-02-2007 18:46:06

diOxy
Abonné
Date d'inscription: 10-10-2006
Messages: 153

MERCI BEAUCOUP !
Vais tester ça de suite ! smile

Hors ligne


#6 

25-02-2007 23:09:19

katsankat
Membre
Date d'inscription: 24-02-2007
Messages: 43

Désolé j'ai posté du code C++ ... Je n'avais pas vu... Le concept devrait être le même cependant.

Hors ligne


#7 

26-02-2007 08:40:11

diOxy
Abonné
Date d'inscription: 10-10-2006
Messages: 153

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


#8 

03-03-2007 17:44:16

diOxy
Abonné
Date d'inscription: 10-10-2006
Messages: 153

Bon, ben... La solution était sur le site de DeusXL :

Voici l'adresse du topic : http://irrlichtnetcp.sourceforge.net/ph … c.php?t=26

Code:

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
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
881 membres
1427 sujets
11117 messages
Dernier membre inscrit: Bidule
14 invités en ligne
Aucun membre connecté
RSS Feed