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

cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008 - 25 janv. 2004 à 00:26
cs_Trident Messages postés 24 Date d'inscription dimanche 22 juin 2003 Statut Membre Dernière intervention 12 décembre 2004 - 26 janv. 2004 à 18:39
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

cs_Trident Messages postés 24 Date d'inscription dimanche 22 juin 2003 Statut Membre Dernière intervention 12 décembre 2004
26 janv. 2004 à 18:39
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.
basted Messages postés 55 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 11 mai 2008
26 janv. 2004 à 18:13
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 !
cs_Trident Messages postés 24 Date d'inscription dimanche 22 juin 2003 Statut Membre Dernière intervention 12 décembre 2004
25 janv. 2004 à 12:35
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.....
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
25 janv. 2004 à 00:26
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 :-(