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

Signaler
Messages postés
34
Date d'inscription
mercredi 9 mars 2005
Statut
Membre
Dernière intervention
29 octobre 2009
-
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
-
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

Messages postés
34
Date d'inscription
mercredi 9 mars 2005
Statut
Membre
Dernière intervention
29 octobre 2009

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
Messages postés
89
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
14 septembre 2007

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
Messages postés
34
Date d'inscription
mercredi 9 mars 2005
Statut
Membre
Dernière intervention
29 octobre 2009

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
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
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
Messages postés
34
Date d'inscription
mercredi 9 mars 2005
Statut
Membre
Dernière intervention
29 octobre 2009

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
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
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
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
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
Messages postés
34
Date d'inscription
mercredi 9 mars 2005
Statut
Membre
Dernière intervention
29 octobre 2009

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...
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
Ah oui, t'as aussi teste avec un glLoadIdentity() juste avant le premier glTranslatef ?:

glTranslated(centerx_world, centery_world, centerz_world);

KeniiyK
Messages postés
34
Date d'inscription
mercredi 9 mars 2005
Statut
Membre
Dernière intervention
29 octobre 2009

oui le load identity est fait a chaque paint gl...
Messages postés
34
Date d'inscription
mercredi 9 mars 2005
Statut
Membre
Dernière intervention
29 octobre 2009

y a aucun pb avec mes matrices car tt le reste fonctionne correctement
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
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
Messages postés
34
Date d'inscription
mercredi 9 mars 2005
Statut
Membre
Dernière intervention
29 octobre 2009

wé c ca
mais c le back spin le plus grav... pour les pixel je peux lire ceurx autour aussi ...
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
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
Messages postés
34
Date d'inscription
mercredi 9 mars 2005
Statut
Membre
Dernière intervention
29 octobre 2009

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 ???
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
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 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Messages postés
34
Date d'inscription
mercredi 9 mars 2005
Statut
Membre
Dernière intervention
29 octobre 2009

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...
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
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
Messages postés
34
Date d'inscription
mercredi 9 mars 2005
Statut
Membre
Dernière intervention
29 octobre 2009

wé ok
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
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