#1 

24-05-2010 11:17:40

Kit-fisto24
Membres
Date d'inscription:
Messages: 60
IP: 81.251.139.15
Courriel

Salut,

Dans mon programme, j'aurai besoin de testé la collision entre une ligne et un terrain. J'utilise donc la fonction getCollisionPoint. Mais celle-ci ne me renvoi jamais true.
Voici mon code:

                core::line3d<f32> ray;
                ray.start = posCam;
		ray.end = posCam;
                ray.end.Y = ray.start.Y - hauteurCam;
                core::vector3df intersection;
                core::triangle3df hitTriangle;
                scene::ISceneCollisionManager* collMan = smgr->getSceneCollisionManager();
		const irr::scene::ISceneNode* nodeCol = 0;
		 scene::ITriangleSelector* Selector = 0;
		 Selector = smgr->createTriangleSelector(terrain->getMesh(), terrain);
                 terrain->setTriangleSelector(Selector);
                 if (collMan->getCollisionPoint(ray, Selector,intersection,hitTriangle,nodeCol))
                      {
				 tombe= false;
		       }

Savez-vous pourquoi la fonction ne détecte aucune collision?


Hors ligne


#2 

24-05-2010 12:06:15

nabouill
Membres
Avatar de nabouill
Date d'inscription:
Messages: 242
IP: 79.92.227.159
Courriel

je penserais a ray.end.y qui n'est pas assez bas dans l'espace. essaye ça pour voir:

Code c++ :

ray.end.Y = ray.start.Y - hauteurCam - 100;

et redis si ça roule ou pas

Hors ligne


#3 

24-05-2010 12:30:43

Kit-fisto24
Membres
Date d'inscription:
Messages: 60
IP: 81.251.139.15
Courriel

Ça ne change rien.


Hors ligne


#4 

24-05-2010 13:14:41

nabouill
Membres
Avatar de nabouill
Date d'inscription:
Messages: 242
IP: 79.92.227.159
Courriel

ça vient peut-être de ton Selector. Voici un petit bout de code que j'ai utilisé qui marchait très bien, il correspond je pense exactement a ce que tu veut faire.
ps: ceci me servait d'un un test de jeu FPS quand je tirais avec un flingue, donc cette ligne s'étend droit devant. en bricolant un peut les positions tu devrais pouvoir arrivé à tes fin.

Code c++ :


vector3df start = myCamera->getPosition();// on defini un point de depart
 vector3df end = (myCamera->getTarget() - start);// et un point d'arrive
end.normalize();
 start += end*8.0f;
end = start + (end * myCamera->getFarValue());
line3d<f32> line(start, end);

triangle3df triangl;
scene::ITriangleSelector* Selector = 0;
Selector = smgr->createTerrainTriangleSelector((scene::ITerrainSceneNode*)node);
const ISceneNode* hitNode;

if(sceneMgr->getSceneCollisionManager()->getCollisionPoint(line, Selector, end, triangl,hitNode))
{
       //ça marche
}


Bon courage

Hors ligne


#5 

24-05-2010 13:41:15

Kit-fisto24
Membres
Date d'inscription:
Messages: 60
IP: 81.251.139.15
Courriel

Ça marche, le problème venait donc bien du selector! Merci beaucoup!


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
570 invités en ligne
membre en ligne: -
RSS Feed