#0 

19-02-2011 22:31:21

TheCamel
Petit nouveau
Lieu: Bruxelles, Belgique
Date d'inscription: 19-02-2011
Messages: 6
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*) :

Code:

        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


#1 

20-02-2011 11:54:00

thoced
Membre
Date d'inscription: 02-08-2010
Messages: 65

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


#2 

20-02-2011 12:29:34

TheCamel
Petit nouveau
Lieu: Bruxelles, Belgique
Date d'inscription: 19-02-2011
Messages: 6
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


#3 

21-02-2011 21:13:56

mmorpglefilm
Abonné
Lieu: la galaxie UDFy-38135539
Date d'inscription: 18-05-2010
Messages: 162
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


#4 

12-03-2011 19:41:52

TheCamel
Petit nouveau
Lieu: Bruxelles, Belgique
Date d'inscription: 19-02-2011
Messages: 6
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


#5 

12-03-2011 20:29:52

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

regarde du coté du SceneCollisionManager, une instruction comme 'getRayFromScreenCoordinates' devrait correspondre à tes attentes .


Force et sagesse...

Hors ligne


#6 

12-03-2011 20:59:05

TheCamel
Petit nouveau
Lieu: Bruxelles, Belgique
Date d'inscription: 19-02-2011
Messages: 6
Site web

Merci beaucoup, ça fonctionne nickel.

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
1426 sujets
11116 messages
Dernier membre inscrit: Bidule
16 invités en ligne
Aucun membre connecté
RSS Feed