#0 

05-10-2007 12:49:21

khayyam
Membre
Date d'inscription: 04-03-2007
Messages: 25
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


#1 

05-10-2007 18:18:43

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

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 :

Code:

         
    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


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
130 invités en ligne
Aucun membre connecté
RSS Feed