UN PETIT PROGRAMME POUR VOIR COMMENT FAIRE POUR SAVOIR SUR QUOI EST LA SOURIS EN

Signaler
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008
-
Messages postés
24
Date d'inscription
dimanche 22 juin 2003
Statut
Membre
Dernière intervention
12 décembre 2004
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/19741-un-petit-programme-pour-voir-comment-faire-pour-savoir-sur-quoi-est-la-souris-en-opengl

Messages postés
24
Date d'inscription
dimanche 22 juin 2003
Statut
Membre
Dernière intervention
12 décembre 2004

hihi,
Dans le buffer la distance donné est multiplié pas 0xffffffff (voir doc opengl) donc tu divize le Z par 0xffffffff et tu passe les cordonnée de la souris et ce résultat dans la matrice inverse, ca te donne la position du point cliquer dans l'espace du dessin.

la ref:
Depth values (which are in the range [0,1]) are multiplied by 2^32 - 1, before being placed in the hit record.

sur la page : http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/selectbuffer.html

G pas le code sous la main mais je me rappel l'avoir fait et ca marché trop bien (j'ai cher 3h mon point rouge sur le plan blanc ... je le voyais pas il était sous la souris .... k con), je rentre chez mes parents mercredi matin, je pourrais peut étre vous envoyer le dit code a ce moment là (si je ne sky pas).


Juste une question ... trés conne je présume
j'ai créé une classe abstraite Objet avec la fonction virutel dessin et une classe derivée cube avec la meme fonction dessin mais plus abstraite, je me donne une liste d'objet et qd je demande de faire le dessin des objets de la dite liste, j'ai un jolie bug.... si qqun peu m'expliquer ... enfin, c po grave sinon.
Messages postés
55
Date d'inscription
lundi 15 septembre 2003
Statut
Membre
Dernière intervention
11 mai 2008

Bon, c'est toujours utils un example de picking ok. Effectivement il faut 2 passe: un pour le rendu, l'autre pour le picking (qui est effectivement plus light en calcul si on retire dans cette passe les truc inutiles)

Une question sur lequel je me suis casse pas mal le dent sans vraiment parvenir a une reponse: quel est la distance separant la position de la souris (supposée en coordonée {x,y,0}) a celle du point de la survace pointer ?

Le zDepth du picking donne n'import quoi (enfin, j'ai l'impression qu'il est just la pour ordonancer l'ensemble des survaces sous la souris), mais quel est la vrai distance Z entre la souris et la surface ?

Voila si tu repond a ca, non seulement tu aura 10/10 (depuis le temp que je cherche!) et en plus ... toute mon admiration, voila !
Messages postés
24
Date d'inscription
dimanche 22 juin 2003
Statut
Membre
Dernière intervention
12 décembre 2004

Le probleme c'est effectivement que l'on fait deux fois le dessin (on peut utiliser les liste d'OpenGl), peut-étre qu'en utilisant deux sortie graphique (HC ou DC ??) une pour la fenétre l'autre pour le buffer de selection .... enfin, faut lire les spécification d'OpenGL.... mais je crois pas qu'on puisse.
Je pense toute fois que la méthode ne coupe pas en deux le frame-rate (en select : pas de texture à charger, pas de lumiére, mais juste si oui ou non les polygones sont affichable), puis on est pas obliger de faire du 50-50, un select pour dix tracé peux suffire, ou alors un select que si il y a eu click ou mouvement de la souris.
Aussi, on est pas obliger de faire des dessins détaillé pour le select, si le prog prévois différent nivo de détail on fait le select en low.....
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008

ai lu ton code, et je trouve regrettable de devoir envoyer deux fois les commandes de vertexes (une fois pr le SELECT et une fois pr le dessin), t certain qu'il y a pas une autre manière plus élégante ? ça me gêne un peu ce genre de trucs :-(