Pages: 1
- Accueil forums
- » Collisions
- » Détection du ISceneNode survolé sans passer par les Bounding Box
19-02-2011 21:31:21
- TheCamel
- Membres

- Date d'inscription:
- Messages: 6
- IP: 87.64.205.233
- Courriel Site web
Bonjour,
J'ai créé un programme qui affiche tout un tas de ISceneNode, et j'aimerai savoir lequel est survolé. Pour cela, j'utilise ce code (où Node est un ISceneNode*) :
if(Node)
Node->setMaterialFlag(video::EMF_WIREFRAME, false);
Node = sceneManager->getSceneCollisionManager()->getSceneNodeFromScreenCoordinatesBB(device->getCursorControl()->getPosition() , 0,false);
Node->setMaterialFlag(video::EMF_WIREFRAME, true);Cependant, ce code fait appel à la fonction getSceneNodeFromScreenCoordinatesBB. Or, il se trouve que mes ISceneNode ont des formes quelque peu particulières, et que donc l'utilisation des Bounding Box dans la détection des collisions avec la souris n'est pas terrible.
J'aimerai savoir s'il existe une fonction permettant de ne pas passer par ces Bouding Box, et, si oui, comment l'utiliser.
Merci d'avance,
TheCamel
Hors ligne
20-02-2011 10:54:00
- thoced
- Membres
- Date d'inscription:
- Messages: 65
- IP: 91.179.160.150
- Courriel
Détermine si ton rayon traverse un TRIANGLE du mesh de ton node, si oui alors tu sais qu'elle node tu touche
Mais dans un premier temps utilise tout de même les bouding box pour éviter de tester l'ensemble des triangles de l'ensemble de tes nodes
Hors ligne
20-02-2011 11:29:34
- TheCamel
- Membres

- Date d'inscription:
- Messages: 6
- IP: 87.64.205.233
- Courriel Site web
Bonjour,
Merci beaucoup pour cette réponse très rapide.
Peux-tu m'expliquer comment utiliser le rayon ? (quelles fonctions pour obtenir le rayon en lui-même puis pour détecter quel triangle a été touché)
Encore merci,
TheCamel
Hors ligne
21-02-2011 20:13:56
- mmorpglefilm
- Membres

- Date d'inscription:
- Messages: 162
- IP: 93.26.144.40
- Courriel Site web
Est il y pas une autres fonctions du même type ?
Je ne sais pas quoi te répondre, je n'est jamais utiliser se genre de fonctions.....
Hors ligne
12-03-2011 18:41:52
- TheCamel
- Membres

- Date d'inscription:
- Messages: 6
- IP: 87.64.5.153
- Courriel Site web
C'est bon j'ai trouvé dans la doc. Mais j'ai une caméra fixe et j'aimerai faire commencer le ray au niveau de la souris.
Vous sauriez comment trouver les coordonnées 3D de la souris (le Y serait une valeur fixe, 7 en l’occurrence, il me faut donc trouver les coordonnées de la projection de la souris (2D) sur le plan d'équation y=7) ?
Hors ligne
12-03-2011 19:29:52
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 90.56.123.36
- Courriel
regarde du coté du SceneCollisionManager, une instruction comme 'getRayFromScreenCoordinates' devrait correspondre à tes attentes .
Force et sagesse...
Hors ligne
12-03-2011 19:59:05
- TheCamel
- Membres

- Date d'inscription:
- Messages: 6
- IP: 87.64.5.153
- Courriel Site web
Merci beaucoup, ça fonctionne nickel.
Hors ligne



