Modeleur 3d : Probleme de back spin ds l affichage (opengl/Qt)

serialtom Messages postés 34 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 29 octobre 2009 - 16 mars 2005 à 11:07
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 - 17 mars 2005 à 15:12
salut a tous

je vous ecris car j ai un souci... je realise actuellement un modeleur 3d et j ai un problème avec l une de mes fonctions. je veux effectuer une rotation autour d un point quelconque de mon objet. je double clique sur ce point puis j effectue une rotation ds mon code cela se deroule ainsi

(point cliqué de coord x,y,z)

translation(xyz)
rotation
translation(xyz)

les translation sont faites avec gltranslate et les rotations avec glmultmatrix(rotation matrix)

le probleme est que quand j effectue mon double click l objet est translaté automatiquement vers un autre point puis la fonction marche nickel ... c assez enervant ...

aidez moi svp !!!!!!

26 réponses

serialtom Messages postés 34 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 29 octobre 2009
16 mars 2005 à 11:21
une petite question subsidiaire comment faire pour agrandir le cone des pixels pour la selection... en effet je suis obligé de faire une dizaine de doubles clicks pour qu ma selection s effectue vraiment

merci a plus
0
barraq Messages postés 89 Date d'inscription mercredi 25 juin 2003 Statut Membre Dernière intervention 14 septembre 2007
17 mars 2005 à 10:04
Je suis pas un expert mais moi j'avais se meme probleme aussi, alors
déja comment est ta fenetre OpenGL ? tu travail en plein écran ? t si
oui c'est un autre problem.

Si non, ou est placé ta fenetre ? dans le coin gauche haut ?

car se qui se passe, quand tu prend les ccordonnée de la sourie, tu les
recupere en coordonnées écran ! donc si ta fenetre est qq par ailleur
sa ne marche pas, car le zero de ta fenetre n'est pas le meme zero que
ton ecran.... donc tu a une translation en effet....



Je suis a la rue ou pas ?

enfin regarde si jamais c'est ça



barraq
0
serialtom Messages postés 34 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 29 octobre 2009
17 mars 2005 à 11:32
je suis pas en plein ecran et la fenetre s ouvre en haut a gauche...

je pense pas que ce soit un pb de transformation coord ecran/coord souris car je l utilise ds d autres fonctions qui marchent nickel ...

voila a plus
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
17 mars 2005 à 12:13
Hey !, re SerialTom !, toujours des soucis avec ce modeleur ??....
et re - aussi Barraq.

Si j'ai bien compris tu clic sur un point, puis tu te translate en ce point, puis rotation, puis tu te remets a ta position ?, si tu fait ca alors teste avec :
glPushMatrix()
glLoadIdentity()
glTranslatef(....)
glMultMatrix(....)
glTranslatef(....)
glPopMatrix();

Suis pas sur que ce soit ca qu'il te faut mais essaye et dit si ca marche..., au pire poste le bout de code....

En attendant je regarde l'histoire de la selection plus grande.

Et au fait Barraq les coords ecran et coords fenetre dans OpenGL n'ont rien n'avoir d'ailleurs il utilise Qt et les height sont inverse.

@+,KeniiyK
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
serialtom Messages postés 34 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 29 octobre 2009
17 mars 2005 à 12:50
re KenniiyK !!

merci pour ton aide ...

ca marche po avec les push et pop j avais deja essaye...

voici le code qui pos probleme :


glTranslated(centerx_world, centery_world, centerz_world);





//Rotations application in the modelview matrix





// there's interference between autorotation and mouse rotation so, to avoid it, when the autorotation is active we make it first, else we make it last because this is a static rotation matrix



// and the dynamic rotation matrix have a bad behaviour when they are not in first place of rotations





// for simulation the rotation aroud a point we can transtlate the frustrum by a vector OP, apply the modifications and reTranslate the frustrum by a vector -OP



if(isRotationActive ==
true)


{



if(AutoRotationTimer->isActive() == TRUE)


{


glMultMatrixf(CurrentAutoRotationMatrix);
//Matrix for the AutoRotation, dynamic in this case


}



else


{


glMultMatrixf(CurrentRotationMatrix);
//Matrix of the current rotation updated (when the left button is pressed), dynamic in this case


}


glMultMatrixf(MemoryRotationMatrix);
//Matrix of basic/former rotation(s), always static


}



else


{


glMultMatrixf(MemoryRotationMatrix);


}


glTranslated(-centerx_world, -centery_world, -centerz_world);


lorsque je double clique je change les valeurs de (centerx_world, centery_world, centerz_world) et il se produit une petite translation de mon objet...

voila a ++++

serialtom
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
17 mars 2005 à 12:50
Si tu utilise le picking d'OpenGL il y a la methode gluPickMatrix(......) qui permet, entre autre, de preciser la taille de selection autour du pointeur de la souris.

Si tu n'utilise pas le picking d'OpenGL dis comment tu fais pour faire ta selection....

KeniiyK
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
17 mars 2005 à 12:56
Je vais peut-etre etre un peu lourd mais deja, est-tu sur de tes matrice de rotation et que la 4eme colonne = (0 0 0 1) (transposée) ? et un autre truc (que tu sais surement deja) les matrices OpenGL sont rentrés colonnes par colonnes et non comme a "l'habitude" lignes par lignes.

KeniiyK
0
serialtom Messages postés 34 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 29 octobre 2009
17 mars 2005 à 12:59
ben g inclus ds mou dbleclick event une methode qui prend le x et le y de la souris puis je choppe le depth component avec gl read pixel...
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
17 mars 2005 à 12:59
Ah oui, t'as aussi teste avec un glLoadIdentity() juste avant le premier glTranslatef ?:

glTranslated(centerx_world, centery_world, centerz_world);

KeniiyK
0
serialtom Messages postés 34 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 29 octobre 2009
17 mars 2005 à 13:01
oui le load identity est fait a chaque paint gl...
0
serialtom Messages postés 34 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 29 octobre 2009
17 mars 2005 à 13:02
y a aucun pb avec mes matrices car tt le reste fonctionne correctement
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
17 mars 2005 à 13:03
Ok c'est la fonction de l'autre fois donc. Mais alors tu clique puis tu regardes si le point est dans une liste de points ? et ensuite si oui alors t'as ton point sinon tu continues a clické ?

KeniiyK
0
serialtom Messages postés 34 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 29 octobre 2009
17 mars 2005 à 13:15
wé c ca
mais c le back spin le plus grav... pour les pixel je peux lire ceurx autour aussi ...
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
17 mars 2005 à 13:26
Pour la selection plus grande (genre 3*3 pixels) ben tu fais :

glReadPixels(x-1,height()-y-1-1,1,1,....);
glReadPixels(x,height()-y-1-1,1,1 ,.....);
etc...
glReadPixels(x, height()-y, 1, 1,.....);
etc...
les 8 pixels autour + le central donc....

puis pour chacun faire le gluUnProject.

KeniiyK
0
serialtom Messages postés 34 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 29 octobre 2009
17 mars 2005 à 13:33
ok
je viens de faire exactement la meme chose ! lol moi je l ai fair avec une dble boucle for ...

et pour le reste t as une idee ???
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
17 mars 2005 à 13:48
Je sais pas trop, mais au fait c'est quoi qui doit tourner autour du point ? la camera ou l'objet ? , je pense que c'est l'objet alors il faut que tu le dessine apres la rotation et avant le dernier/deuxieme glTranslatef non ?

KeniiyK.

TIENS BON ON VA Y ARRIVER !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0
serialtom Messages postés 34 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 29 octobre 2009
17 mars 2005 à 13:58
ben l objet est fixe ... la seule chose qui bouge est la camera ... et le dessin se fair uniquement apres ttes les transfos non ??? enfin c mon cas...
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
17 mars 2005 à 14:04
La rotation s'applique a la camera alors ? ben alors fais une classe camera et entretien la avec un repere local a elle meme et puis tu fais tes transformations s'pas ?

KeniiyK
0
serialtom Messages postés 34 Date d'inscription mercredi 9 mars 2005 Statut Membre Dernière intervention 29 octobre 2009
17 mars 2005 à 14:10
wé ok
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
17 mars 2005 à 14:15
Et la petite translation dont tu parles ce ne serai pas parce que ta camera bouge un peu et que t'as l'impression que c'est l'objet qui bouge ?

KeniiyK
0
Rejoignez-nous