begin process at 2010 03 21 00:06:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

OpenGL

 > 

PB modeleur 3D changement du centre de rotation de l objet


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

PB modeleur 3D changement du centre de rotation de l objet

mercredi 9 mars 2005 à 10:56:32 | PB modeleur 3D changement du centre de rotation de l objet

serialtom

bonjour a tous

je vous contacte car j ai un petit probleme : je developpe actuellement un petit modeleur 3d sous opengl et qt et j aimerais implementer une fonction rotation autour d un point pour cela j utilise la fonction suivante :

bool GLBox::pointUnderPixel(int x, int y, double vec[3])

{

float depth;

// Qt uses upper corner for its origin while GL uses the lower corner.

glReadPixels(x, height()-y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth);

bool found = depth < 1.0;

GLdouble dx = x;

GLdouble dy = y;

GLdouble dz = depth;

GLdouble proj[16];

glGetDoublev(GL_PROJECTION_MATRIX, proj);

GLdouble modelview[16];

glGetDoublev(GL_MODELVIEW_MATRIX, modelview);

GLint viewport[4];

glGetIntegerv (GL_VIEWPORT, viewport);

double rx,ry,rz;

gluUnProject(dx,dy,dz, modelview, proj, viewport, &rx,&ry,&rz);

vec[0] = rx;

vec[1] = ry;

vec[2] = rz;

return found;

}

mais le point trouvé n a rien a voir avec le point clické et de plus la rotation ne se fait pas autour du nouveau point mais autour du centre de l objet comme auparavant ...

avez vous de piste ???

merci de votre aide ...

a plus

tom

mercredi 9 mars 2005 à 11:33:48 | Re : PB modeleur 3D changement du centre de rotation de l objet

KeniiyK

Membre Club

"Rotation autour d'un point" -> c'est une rotation un peu libre non... ?
D'apres ce que j'ai compris de ton code, tu veux cliquer a l'ecran et faire une rotation par rapport a un axe = axe de profondeur passant par le point cliqué ?
Dis en peu plus... peut etre que je pourrai mieux t'aider.

mercredi 9 mars 2005 à 11:52:01 | Re : PB modeleur 3D changement du centre de rotation de l objet

serialtom

ben j ai programme un espace de rotation de type arcball/track ball (fortement aide par la lecon 48 de nehe...)cette rotation ce fait par rapport au centre de lobjet... moi je recupere grace a la methode ci dessus un point physique je je rentre en parametre a ma methode trackball pour definir le nouveau centre de rotation mais cela n a aucun effet ...
mercredi 9 mars 2005 à 13:11:23 | Re : PB modeleur 3D changement du centre de rotation de l objet

KeniiyK

Membre Club

Ok, j'y etais presque donc... Rotation ArcBall/TrackBall connait pas (==transformation solide ? (rotation+translation)).

- Une rotation par rapport a un point ne veut rien dire en 3D, faire tourner tel objet par rapport au point P de X degrés ca donne quoi ? en 2D ca a un sens, mais en 3D je vois pas.
A moins que l'objet est un vecteur d'orientation et que tu veuilles faire tourner l'objet par rapport a son centre tel que le vecteur d'orientation pointe vers ton point selectionné

- As tu testé ta fonction de "picking" ci-dessus ? (ca a l'air de marché mais sais t on jamais) ? pourquoi le depth==1.0 est il dérangeant pour toi ? (bool found=depth<1.0 et rajoute juste apres if(!found) return false ou un if(found) { tout le reste }jusqu'avant return found car les glGetXXX ca pourri les perfs).

- Pour faire un truc plus rapide que les glGetXXX et finalement gluUnProject pour trouver les coordonnees 3D du point cliqué, si tu connais tes axes camera (up,right,profondeur en orthonormé direct), le depth du point clique et un peu de math, et bien tu peux calculer directement les coords du point connaissant ta matrice de projection (enfin plutot connaissant la fonction que tu emplois pour definir ta matrice de projection, glFrustrum, gluPerspective,etc..).

Pour finir expliques clairement la rotation que tu comptes faire une fois que tu as le point 3D

@+, KeniiyK.

mercredi 9 mars 2005 à 13:35:49 | Re : PB modeleur 3D changement du centre de rotation de l objet

serialtom

merci bcp pour ta reponse

une rotation en CAO est definie a l aide des quaternions pour definir les troix valeurs xyz de la rotation nouxs avons besoin de 2 points le point de debut du click et le point de relachement ces coordonnees enregistrees je les projete sur une sphere de centre O pour obtenir une coordonnee en z correspondante ensuite je calcule le produit vectoriel de OP1 avecOP2 et j obtient mon axe de rotation, avec la norme j obtient mon angle....

voici pour l environnement arcballl ou trackball. le principe de la rotation autour d un point est le meme a part qu on remplace directement le point O par le nouveau centre de rotation on aura donc une rotation sui vant x, y, et z mais par rapport au centre C...

depth = =1 est la profondeur du plan de clipping par defaut non, il ne faut pas que notre point soit dessus...

je n utilise aucune perspective car on est dans l environnement CAO

qu entends tu par "fonction de picking" ?

mercredi 9 mars 2005 à 14:06:46 | Re : PB modeleur 3D changement du centre de rotation de l objet

KeniiyK

Membre Club

Ok je crois qu'on va y arriver. J'ai besoin juste d'une derniere precision concernant la rotation (dis moi laquelle de ces deux propositions est la bonne) :
- L'objet tourne sur lui meme, son centre + l'axe de rotation determiné par les 2 points cliqués et que tu "translate" donc au centre de l'objet pour faire une rotation locale. (donc sans modification du centre de l'objet).

- L'objet tourne autour de l'axe de rotation determiné par les 2 points cliqués pour faire une rotation "univers"/"globale"/"spatiale" (choisis ton terme...). (donc avec une modification du centre de l'objet).

Pour l'histoire du depth==1.0, effectivement cela veut dire que le point sera sur le plan de clipping, mais...... ...... et alors ????????, tu veux un point 3D non ?, en quoi cela perturbe le calcul du point ?

"je n utilise aucune perspective car on est dans l environnement CAO", tu veux dire que ta projection est orthogonale ?, et moi quand je disais "(enfin plutot connaissant la fonction que tu emplois pour definir ta matrice de projection, glFrustrum, gluPerspective,etc..)." je parlais de toute les fonctions de projection, y compris glOrtho().

Le picking c'est la sélection d'un objet (ou d'un groupe d'objets) a l'ecran, c'est un peu ce que tu fais : selection d'un point dans un nuage de points en gros...

mercredi 9 mars 2005 à 14:19:18 | Re : PB modeleur 3D changement du centre de rotation de l objet

serialtom

wé c ca...

la bonne proposition est le :

- L'objet tourne sur lui meme, son centre + l'axe de rotation determiné par les 2 points cliqués et que tu "translate" donc au centre de l'objet pour faire une rotation locale. (donc sans modification du centre de l'objet).

as tu des piste ???

comme tu peux le voir je ne suis pqs du tout codeur a la base ... ca fait 2 sem que je code ce bordel et g un peu de mal ... voila merci !
mercredi 9 mars 2005 à 14:59:34 | Re : PB modeleur 3D changement du centre de rotation de l objet

KeniiyK

Membre Club
Des pistes j'en ai, mais j'aimerais finir d'abord de bien cerner ton probleme pour te donner la/les adéquat(s)....

Dans ta fonction le int x, et le int y represente les coordonnées souris je pense alors pourquoi dans l'appel a glReadPixels(x, height()-y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth); il y a "height()-y" et pas "y" en coordonnées ? parce que là c'est sur tu ne vas pas recevoir le depth correspondant au point cliqué.

Et j'ai pas tout saisi là :
"nous avons besoin de 2 points le point de debut du click et le point de relachement ces coordonnees enregistrees je les projete sur une sphere de centre O pour obtenir une coordonnee en z correspondante ensuite je calcule le produit vectoriel de OP1 avecOP2 et j obtient mon axe de rotation, avec la norme j obtient mon angle...."

sphere de centre O == sphere centrée à l'origine ? ou amors O est quelconque ?
coordonnee en z correspondante == coordonnée en z égale/équivalente ? sinon c'est quoi ce z (celui du quaternion?)
calcule le produit vectoriel de OP1 avecOP2 et j obtient mon axe de rotation, ben je croyais que cétait P1P2 ton axe de rotation ?
mercredi 9 mars 2005 à 15:22:32 | Re : PB modeleur 3D changement du centre de rotation de l objet

serialtom

le height - y c est parce que je developpe avec Qt regarde le commentaire tt est dedans...

// Qt uses upper corner for its origin while GL uses the lower corner.

la sphere est centree a l origine et l axe est donne par le produit vectoriel et non pas par P1P2

le z correspond a la hauteur du point de coord x,y projete sur la sphere z appartient donc a [0,r]
mercredi 9 mars 2005 à 15:41:09 | Re : PB modeleur 3D changement du centre de rotation de l objet

KeniiyK

Membre Club

Autant pour moi je viens de verifier dans un de mes codes (je developpe aussi avec Qt)  l'histoire du height-y, tu as raison par contre je mettrais height-1-y car y appartient a [0,height-1].
 
Finalement j'ai re-testé tout ca, alors mon glReadPixels marche impec (couleur, depth, etc...). Par contre j'ai juste un truc chiant mais a savoir c'est que le depth renvoyé est sur une echelle logarithmique et non lineaire, du au fait que ma projection est perspective. Mais toi tu dois avoir la bonne valeur vu que t'as une projection orthogonale (enfin d'apres ce que j'ai compris).


1 2 3

Cette discussion est classée dans : rotation, gl, vec, depth, gldouble


Répondre à ce message

Sujets en rapport avec ce message

pb tansparence et rotation [ par jopop ] J'ai créé deux objets contenant des parties transparentes (alpha blending) que je paux faire tourner autours d'un axe à l'aide de la souris. La premiè De l'openGL sur le bureau [ par Alcantornet ] Hello le peuple, J'ai fait une petite horloge en openGL et j'aimerais pouvoir la mettre à la place de l'arrière plan. Je pense qu'il faut que je lie pb avec les rotations [ par ET29 ] Bonjour,je bute sur un petit pb de rotations :je voudrais faire pivoter une pyramide avec la souris autour des axes X et Y de l'ecran (soit horizontal [opengl] glGenTextures et new [ par gillescpp ] Voila, J'ai un probleme avec opengl. J'explique rapidement : apres un appel de glGenTextures, il m'est impossible d'allouer de la mémoire dynamiquemen Problème d'affichage de texture [ par Turok ] Bonjour,Alors voila le problème est simple, voici un code que j'utilise pour afficher une simple image 2d en utilisant OpenGl et SDL, mais celui ci ne Texte openGL/Glut [ par thomasvd ] Bonjour!J'ai découvert openglgmut sdl et tout le tralala il y a quelques jours et j'avoue que je m'y perd un peu.En fait je voudrais afficher du texte code en c++ [ par Sgh_Khaoula ] Svp est ce que quelqun'un peut m'aider à coprendre la ligne "Triangles = new std::vector[ Depth ];"MultiMesh::MultiMesh( int depth ) { Depth = depth;  Rotation Axiale [ par Seboo ] Bonjour, J'ai un probleme concernant la rotation. J'ai 2 points A et B de coordonnées respectives x1,y1,z1 et x2,y2,z2 et j'aimerai appliquer à ces de Pr avec le multisampling openGL [ par mehdithe ] Bonjour,Je développe un moteur 3D et je souhaite utiliser le multisampling,N.B : je n'utilise pas la librairie GLUT.Je me suis donc inspiré du code 46 glReadPixels et gluUnProject [ par Seboo ] Bonjours,J ai un probleme pour utiliser ces deux fonctions.Enfaite j ai un cube et avec un mouvement sur ce cube j'essaye de connaitre le vecteur sens


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,342 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales