#1 

22-02-2007 15:06:26

diOxy
Membres
Avatar de diOxy
Date d'inscription:
Messages: 153
IP: 41.223.30.150
Courriel

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


#2 

22-02-2007 20:36:39

Copland
Modérateurs
Date d'inscription:
Messages: 657
IP: 90.5.161.200
Courriel  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


#3 

23-02-2007 11:19:13

diOxy
Membres
Avatar de diOxy
Date d'inscription:
Messages: 153
IP: 41.223.30.150
Courriel

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


Hors ligne


#4 

24-02-2007 10:01:32

katsankat
Membres
Date d'inscription:
Messages: 43
IP: 82.122.75.58
Courriel

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


#5 

24-02-2007 18:12:16

Jerry Kan
Membres
Date d'inscription:
Messages: 265
IP: 82.243.77.149
Courriel

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


Hors ligne


#6 

25-02-2007 17:46:06

diOxy
Membres
Avatar de diOxy
Date d'inscription:
Messages: 153
IP: 41.223.30.150
Courriel

MERCI BEAUCOUP !
Vais tester ça de suite ! smile


Hors ligne


#7 

25-02-2007 22:09:19

katsankat
Membres
Date d'inscription:
Messages: 43
IP: 82.122.67.101
Courriel

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


Hors ligne


#8 

26-02-2007 07:40:11

diOxy
Membres
Avatar de diOxy
Date d'inscription:
Messages: 153
IP: 41.223.30.150
Courriel

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


#9 

03-03-2007 16:44:16

diOxy
Membres
Avatar de diOxy
Date d'inscription:
Messages: 153
IP: 41.223.30.150
Courriel

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

Voici l'adresse du topic : http://irrlichtnetcp.sourceforge.net/phpBB2/viewtopic.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é
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
118 invités en ligne
membre en ligne: -
RSS Feed