#1 

19-02-2011 21:31:21

TheCamel
Membres
Avatar de TheCamel
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


#2 

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


#3 

20-02-2011 11:29:34

TheCamel
Membres
Avatar de TheCamel
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


#4 

21-02-2011 20:13:56

mmorpglefilm
Membres
Avatar de mmorpglefilm
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


#5 

12-03-2011 18:41:52

TheCamel
Membres
Avatar de TheCamel
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


#6 

12-03-2011 19:29:52

tmyke
Administrateurs
Avatar de tmyke
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


#7 

12-03-2011 19:59:05

TheCamel
Membres
Avatar de TheCamel
Date d'inscription:
Messages: 6
IP: 87.64.5.153
Courriel  Site web

Merci beaucoup, ça fonctionne nickel.

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