Pages: 1
- Accueil forums
- » Collisions
- » Comment repérer les objets situés derrière un rectangle écran ?
#1
05-10-2007 10:49:21
- khayyam
- Membres
- Date d'inscription:
- Messages: 25
- IP: 88.168.68.63
- Courriel Site web
Bien le bonjour,
Mon problème du jour est assez simple, comment obtenir la liste de tous les noeuds situés derrière un rectangle défini en coordonnées écran ?
Sachant que bien sûr la solution doit être légère.
L'idée est de faire du picking, mais en prenant un rectangle au lieu d'un point.
Des idées ? (propres, faisables et robustes)
J'ai bien quelques idées, mais peut-être avez-vous des idées novatrices ....
Hors ligne
#2
( code fait a la volet ... donc surment pas bien optimisé )
Tu appliques cette fonction au 4 sommets du rectangle de selection et tu recupere une pyramide apres selon ton projet :
Bref utiliser au mieu les specificitées du projet il y plein de methode mais la base et de recuperer "la pyramide de selection"
05-10-2007 16:18:43
- firnafin
- Membres

- Date d'inscription:
- Messages: 150
- IP: 88.141.137.105
- Courriel
Bonjour;
Tout depend de la nature de ton projet:si il y a un terrain ( rts ) ou pas ( jeux dans l'espace par exemple ) du nombre de node ( si c'est de l'ordre de 10 ou 200) mais voila un methode faisable :
irr::core::line3df getLinePick(irr::scene::ICameraSceneNode* camera,irr::gui::ICursorControl* cursor){
irr::scene::SViewFrustum* VF=camera->getViewFrustum();
irr::core::vector3df LU=VF->getFarLeftUp();
irr::core::vector3df Y=VF->getFarLeftDown()-LU;
irr::core::vector3df X=VF->getFarRightUp()-LU;
return irr::core::line3df(camera->getPosition(),LU+X*cursor->getRelativePosition().X+Y*cursor->getRelativePosition().Y);
}( code fait a la volet ... donc surment pas bien optimisé )
Tu appliques cette fonction au 4 sommets du rectangle de selection et tu recupere une pyramide apres selon ton projet :
- si il a y un terrain et que les nodes sont dessus tu transfomes cette pyramide en un rectangle ( intersection terrain pyramide ) et tu recuperes les nodes dans celui
- si il n'y a pas de terrain tu peux rechercher les nodes dans la pyramide directement
Bref utiliser au mieu les specificitées du projet il y plein de methode mais la base et de recuperer "la pyramide de selection"
Hors ligne



