#0 

30-05-2008 15:39:54

Sakamakak
Membre
Date d'inscription: 28-05-2008
Messages: 18

Je reprends, puisqu'il s'agit d'un déplacement de topic.

J'ai une scène 3D représentant un arbre de classification phylogénétique d'espèces, la 3D permet plein de manipulations très intéressantes (ça c'était pour préciser le domaine d'application, et merci Irrlicht smile )

L'idée est de permettre à l'utilisateur de tracer un lasso à mains levée pour sélectionner un ensemble d'espèces, qui ne sont ni plus ni moi que des node de ma scène.

Pour l'instant je travaille sur le tracé du lasso, mais je suis obliger le réaliser en mode pixellaire (vu qu'irrlicht ne fournis pas de tels outils, enfin pas à ma connaissance). Je me retrouve avec la problématique de savoir quels sceneNode sont dans le lasso. (qui lui je le rappelle est en 2D).

J'attends des idées de solutions. big_smile

Hors ligne


#1 

31-05-2008 08:03:08

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

Hello,
Le problème c'est que ton lasso peut avoir n'importe quelle forme si je comprends bien ?
A la rigueur il faudrait déterminer une zone ronde ou carré après avoir fait le tracé au lasso et faire une projection de coordonée 2D vers 3D.
Bon le soucis c'est qu'il te faudra déterminer une profondeur maximale en Z sinon ça va bouffer les ressources.
Cherche à "Project 2D coords to 3D coords" ou quelque chose comme ça sur google, tu trouveras sans doute des codes facilement adaptable...Au pire des cas, je dois avoir un vieux code en basic pour faire se genre de chose, mais il faut que je farfouine dans mes vieux cd...

http://www.mvps.org/directx/articles/rayproj.htm


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#2 

31-05-2008 19:16:16

firnafin
Abonné
Date d'inscription: 31-03-2007
Messages: 150

- projeter les coords 3d de la node a tester. ca te donne un point (2d donc ) noté P ;( a l'aide des martices View Project et World )
- prendre une droite passant par  P  quelconque , D;
- trouver les points d'intersection entre cette droite D et le contours , points X1...Xn.
- classer les points X1...Xn selon s'ils sont ou pas du meme coté de la droite par rapport a P;
- compter les Xi qui sont du meme cote ( l'un  ou l'autre ), N;
- si N pair X n'est pas dans le contours , sinon il l'est.

Attention tout de meme au cas ou D est tangente au countours , ne pas ajouter au point d'intersection , et compter de l'autre coté , si seulement un point tangent de charque coté, pas dans la zone.

Une petite illustration pour mille mots :



Edit  : elles sont infectes les couleurs smile

Dernière modification par firnafin (31-05-2008 19:17:35)

Hors ligne


#3 

02-06-2008 09:21:20

Sakamakak
Membre
Date d'inscription: 28-05-2008
Messages: 18

Super ! J'avais entendu parlais de cet algo.
Maintenant, je n'ai plus qu'a l'implémenter. Thanks ! big_smile

Hors ligne


#4 

02-06-2008 15:21:58

Sakamakak
Membre
Date d'inscription: 28-05-2008
Messages: 18

Je clos le sujet en disant que cela fonctionne à merveille.
Une petite précision, on peut transformer des coordonnées 3D en coordonnées 2D en utilisant simplement cette fonction :

Code:

core::position2d<s32 > 2DPos = smgr->getSceneCollisionManager()->getScreenCoordinatesFrom3DPosition(node->getAbsolutePosition(), camera);

L'algorithme dont firnafin parle s'appelle l'algorithme du Crossing Number et on peut en trouver une implémentation simple à cette adresse : http://www.geometryalgorithms.com/Archi … ithm_0103/
Si ça peut aider quelqu'un d'autre par la suite. big_smile
Merci encore à tous pour votre aide précieuse.

Hors ligne


#5 

02-06-2008 16:52:24

firnafin
Abonné
Date d'inscription: 31-03-2007
Messages: 150

A vrai dire je l'ai cherchée et trouvée tout seul , je ne voulais pas m'aider du net ,ravi qu'elle pour un si jolie nom.Je presume que celle donnée sur le lien est améliorée.. enfin a quand la demo du lassso smile

Hors ligne


#6 

02-06-2008 17:07:38

Sakamakak
Membre
Date d'inscription: 28-05-2008
Messages: 18

La démo arrive dans les jours qui viennent. J'optimise et je rend ça un peu paramétrable et je fourni tout ça smile

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
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
139 invités en ligne
Aucun membre connecté
RSS Feed