Ma quete dasn l'openGL Continue :)

patfac1 Messages postés 20 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 27 janvier 2006 - 6 févr. 2004 à 00:21
cs_Geff Messages postés 192 Date d'inscription vendredi 2 mars 2001 Statut Membre Dernière intervention 10 janvier 2006 - 6 févr. 2004 à 10:38
Tout d'abord merci a cuq qui prend tjrs le temps de me répondre :)

Ca va , ca comence a aller, je crééer mes ojets , les déplace , les supprimer :) Mais le souci , c'est que kan je les déplace, impossible de syncroniser le déplacement de ma souris avec celui de mon objet en utilisant les variables X ou Y recu par l'event mousemouve .. de plus il manque le z ... Alors je suppose qu'il doit exister un moyen pour récupérer les coordonnées de mon pointeur à l'interieur de mon univers OpenGL :) Mais comment ????

Merci d'avance :)

Pat

1 réponse

cs_Geff Messages postés 192 Date d'inscription vendredi 2 mars 2001 Statut Membre Dernière intervention 10 janvier 2006
6 févr. 2004 à 10:38
Voila un probleme sympa! :D

Si je comprends bien tu édite des objets 3D dans une Vue 3D! Le plus simple aurait été de les éditer dans un ensemble de vue 2D :: les différents plans :: XY, ZY, XZ
Ainsi tu n'as pas a t'occupé de la 3ème dimension! il faut alors utilisé un pointeur (curseur, appel le comme tu veux) qui est un point de repère dans ton espace 3D, un peu comme le Curseur dans un fichier texte!

Cependant ce n'est pas une solution géniale car cela t'oblige a avoir différents plans de vue, deplus cela ne fonctionne pas pour un jeux ou quelquechose de ce genre, mais est tout a fait approprié pour un modeleur par exemple! Il en reste que cette solution est quand meme tres limité!

Si je comprends bien ton problème tu veux bouger des objets dans ton espace 3D par rapport a ta souris qui elle se balade sur ton écran 2D! A ce moment la tu peux imaginer que ton objet 3D bouge sur un plan qui est parallèle au plan de ta caméra! Aussi tu dois calculer le plan de ta caméra, puis le positionner par rapport a ton objet!

La tu va me dire "Ok, mais comment j'fait?" :p a moi de te répondre "Bah on va faire un peu d'maths :D"
Normalement comme tout bon OpenGLien qui se respecte tu utilise glulookat pour positioner et diriger ta caméra! Cette procédure se décompose ainsi ::

gluLookAt Pos.X, Pos.Y, Pos.Z, Vue.X, Vue.Y, Vue.Z, 0, 1, 0

Remarques ::
Pos est la position de ta caméra dans l'espace
Vue est le point que ta caméra "regarde"
0, 1, 0 C'est le vecteur directeur du haut de ta caméra (tu peux mettre autre chose que 0,1,0 bien sur)

Ainsi tu peux aisément calculer ton plan, car tu as le vecteur normale a ce plan par la formule ::

VecN = Vue - Pos

Aussi tu facilement le plan qui a pour normale VecN et qui passe par le centre de ton objet

Maintenant il y'a plusieurs solutions possible pour bouger ton objet! Je te propose la premiere qui me passe par la tete :: La position de ton objet une fois k'il est "bougé" est le résultat de l'intersection de ton plan et du rayon partant de ta souris et qui a pour vecteur directeur la normale du plan!

Ainsi l'équation générale du plan ::

A*x + B*Y + C*Z + D = 0

Equation de ton rayon partant de ta souris ::

VecSouris.X = PosSouris.X + K * VecN.X
VecSouris.Y = PosSouris.Y + K * VecN.Y
VecSouris.Z = PosSouris.Z + K * VecN.Z

Aussi comme tu peux le voir K est inconnu c'est justement ce que l'on recherche, tu le calcul ainsi ::

K = - ( A* PosSouris.X + B * PosSouris.Y + C * PosSouris.Z + D )

Pour trouver la position de ton objet sur ton plan, tu n'as qu'a employé la meme fomrule que eclle pouir la souris ainsi ::

ObjetPos.X = PosSouris.X + K * VecN.X
ObjetPos.Y = PosSouris.Y + K * VecN.Y
ObjetPos.Z = PosSouris.Z + K * VecN.Z

Et voila! Cette méthode me semble assez simple a mettre en oeuvre, si il y'a un truk ke tu n'as pas compris n'hesite pas a poster sur le 4um!

Have a Good Code ;)

Geff >:)
0
Rejoignez-nous