Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1392 connectés 

  FORUM HardWare.fr
  Programmation

  Position clickée dans une fenetre openGL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Position clickée dans une fenetre openGL

n°104513
nbauten
Tu parleras quand on te l'dira
Posté le 25-02-2002 à 14:24:38  profilanswer
 

Salut,
  j'ai fais un logiciel (sous C++ builder) qui me permet d'afficher des objet 3D en openGL.
  Je voudrais pouvoir selectionner des points de ces objets en clickant dessus mais je sais pas trop comment faire pour récuperer des coordonnées 3D d'un point clické à l'écran... est-ce que quelqu'un à une idée?  
Merci!

mood
Publicité
Posté le 25-02-2002 à 14:24:38  profilanswer
 

n°104518
Mikvix
Posté le 25-02-2002 à 14:35:37  profilanswer
 

Logiquement, tu peux pas obtenir les coordonnées 3D en précisant un point 2D :)
 
Je pense qu'il faut boucler sur les points de ton objet et que tu regardes si ses coordonnées "vérifient" l'équation de la droite que fait la camera et le point que tu as cliqué ... euhhh ... en tout cas c'est presque clair dans ma tete :)
 
Mais j'espere pour toi qu'il y a une autre technique :)

n°104527
nbauten
Tu parleras quand on te l'dira
Posté le 25-02-2002 à 14:44:06  profilanswer
 

Ben, pour l'instant c'est la seule chose que je vois aussi: déterminer l'équation de la droite correspondant au point clické à l'écran et en déduire le point le plus proche de la caméra correspondant... mais le probleme c'est que c'est des modèles avec plusieurs milliers de point alors même sur un P4 ca risque d'être un peu lent...

n°104530
Mikvix
Posté le 25-02-2002 à 14:53:14  profilanswer
 

Ha oui c'est clair que ça va ramer !!
 
Sinon, t'es obligé de faire ça en OpenGL ?
 
Si c'est un truc "pro" je crois que Cascade permet de faire des trucs sympa dans ce genre là ...

n°104539
nbauten
Tu parleras quand on te l'dira
Posté le 25-02-2002 à 14:59:52  profilanswer
 

Bah, pour ce qui est de l'OpenGL, j'ai déja développé pas mal de méthodes avec alors ca risque de pas être évident de changer...
 Sinon, c'est quoi Cascade?

n°104546
Mikvix
Posté le 25-02-2002 à 15:09:43  profilanswer
 

J'ai pas utilisé longtemps, mais si mes souvenirs sont corrects, c'est une librairie graphique qui permet de faire de la CAO ... je crois meme que Cascade est une "surcharge" d'OpenGL. Mais bon, c'est ultra ciblé ... et pis moi j'ai pas trop aimé :)

n°104640
nbauten
Tu parleras quand on te l'dira
Posté le 25-02-2002 à 17:41:23  profilanswer
 

Je viens d'aller voir leur site, je suis pas que Cascade gere ca... dommage, va falloir faire preuve d'ingéniosité si je veux pas qu'a chaque déplacement de ma souris il y ait 30 secondes de calcul...

n°104643
Titoine42
Posté le 25-02-2002 à 17:48:24  profilanswer
 

quand tu dis que tu veux sélectionner des points, j'imagine que tu ne t'interesse qu'aux vertex de tes objets
 
si c'est le cas, tu dois pouvoir accéder aux coordonnées 3D de ces vertex, et il ne te reste plus qu'a projeter sur l'écran pour obetnir leurs coordonnées 2D et comparer avec la position de ta souris

n°104707
nbauten
Tu parleras quand on te l'dira
Posté le 25-02-2002 à 19:54:31  profilanswer
 

C'est une bonne idée, fô que j'essaie mais j'ai peur que ce soit qd même assez lent.
Y'a pas une commande OGL qui permette de connaitre les coordonnées projetées des vertex?

n°104716
youdontcar​e
Posté le 25-02-2002 à 20:11:29  profilanswer
 

nbauten a écrit a écrit :

mais le probleme c'est que c'est des modèles avec plusieurs milliers de point alors même sur un P4 ca risque d'être un peu lent...


stratégie bourrin : calculer l'intersection avec la bbox - si intersection bbox, tester toutes les faces de l'objet. répéter pour chaque objet, à chaque intersection, remplir le tableau d'objets intersectés. trier en fonction de la profondeur des intersections -> tu as alors l'intersection la plus proche de la caméra.
 
quant à la vitesse, c'est ridicule. si tu fais ça sur un p2 350 avec des objets de dizaines de milliers de faces, alors oui ça prendra qq petites secondes. sinon c'est instantané. alors sur un p4 ...  
 
pour la commande ogl pour obtenir les coords projetés, il suffit de multiplier tes points par GL_MODELVIEW * GL_PROJECTION. tu as alors la projection en coords homogènes.  
 
pour te démerder à partir de là, tu cherches l'algo sur le forum, il a déjà été donné plusieurs fois.

mood
Publicité
Posté le 25-02-2002 à 20:11:29  profilanswer
 

n°104722
_gtm_
Posté le 25-02-2002 à 20:46:04  profilanswer
 

Sinon, y'a peut être moyen de faire ça avec glRenderMode(GL_SELECT) :
 
Il parait que ca sélectionne les primitives qui sont dans une zone définie par l'utilisateur (donc ici le rayon (au sens raytracing) qui correspond à ton clic).
La démarche serait la suivante :  
creer un buffer
glRenderMode(....)
définir la zone avec les clipping planes
dessiner ta scene comme tu le ferais normalement
et opengl remplit ton buffer avec les primitives qui croisent ton rayon.
 
J'ai jamais essayé, mais je viens de voir ca dans la MSDN (recherche glRenderMode).
 
l'avantage avec cette méthode serait que t'as pas besoin de programmer grand chose, et que l'accélération amtérielle est utilisée

n°104786
LeGreg
Posté le 25-02-2002 à 23:20:07  profilanswer
 

allez regarder l'exemple
"picking" du SDK DirectX
ca vous fait pile
ce que vous voulez.
 
A+
LEGREG

n°104790
LeGreg
Posté le 25-02-2002 à 23:23:02  profilanswer
 

Sinon ceux qui font du raytracing
ont plutot des bonnes methodes d'organisation
de l'espace. (AABB, OBB, spheres ou octrees)
 
Aucun interet si tu as 10 objets
et que tu traces juste 1 rayon.
ca se fait a la vitesse de la lumiere.
 
A+
LEGREG

n°105872
nbauten
Tu parleras quand on te l'dira
Posté le 28-02-2002 à 09:37:43  profilanswer
 

Lorsque je tourne ma scene mes matrice de projection (récupérée avec glGetFloatv() )et modelview ne changent pas... c'est normal? ou c'est parce que je modifie seulement glulookat() pour me déplacer???

n°105916
LeGreg
Posté le 28-02-2002 à 10:30:00  profilanswer
 

a quel moment utilises-tu glulookat
et a quel moment recuperes-tu ta
matrice modelview?
Normalement la matrice de projection
ne change pas sauf si tu veux
changer ton viewport
(zoom, redimensionnement etc..)
 
A+
LEGREG

n°105928
nbauten
Tu parleras quand on te l'dira
Posté le 28-02-2002 à 10:54:56  profilanswer
 

J'suis pas sur que ce soit la bonne méthode mais en gros je fais comme ca:
 
//Initialisation avec les glEnable...
 
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-Rayon*ZOOM*ratio,Rayon*ZOOM*ratio,-Rayon*ZOOM,Rayon*ZOOM,
ZNear,ZFar);
 
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(Eye[0],Eye[1],Eye[2],Center[0],Center[1],Center[2],Up[0]
,Up[1],Up[2]);
 
glGetFloatv(GL_MODELVIEW_MATRIX,modelview);
glGetFloatv(GL_PROJECTION_MATRIX,projection);
 
//création des objets avec glBegin glEnd...
 
(1)
 
SwapBuffers(hdc);
 
 
Le problème c'est que dans ma fenêtre OGL j'affiche le repere en bas à droite et donc après avoir rendu ma scene principale je recrée un autre viewport dans la même fenetre (en (1) ) avec, pareil ma caméra qui tourne autour d'un triedre... C'est peut-êre légerement bourin comme méthode mais c'est ce que j'ai trouvé de lus rapide à développer.. c'est comme la caméra qui bouge, c'est plus intuitif que d'appliquer des matrices de rotations à la scène...
  En fait au départ je voulais juste faire un petit module de visualisation mais maintenant j'aimerai pouvoir voir les propriétés des points affichés à l'écran quand je clicke dessus (comme dans I-deas ou patran si y'en a qui connaissent). (car chaque point à des propriétés... numéro de référence, repère de définition...)
 
 Heu, je suis pas sur d'être clair là... :crazy:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  Position clickée dans une fenetre openGL

 

Sujets relatifs
[JS] Ouvrir une fenetre contenant une image et de la taille de l'imageC'est quoi cette fenetre noire derrière mon appli Delphi ?!
[Delphi] Mettre une fenetre au premier plan[C++] Pourquoi ma fenêtre est si longue à se fermer ?
Envoi de formulaire HTML et ouverture d'une nouvelle fenetre[JAVA] Mode application+OpenGL : femeture de fenêtre
[JAVA] Fenetre modaleCaméra dans OpenGL sous Delphi ?
[opengl / 3DS max ]menus en DHTML : position ni absolute ni relative...?
Plus de sujets relatifs à : Position clickée dans une fenetre openGL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR