Accueil > Forum > > > > PB modeleur 3D changement du centre de rotation de l objet
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
|
"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
|
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
|
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
|
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
|
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).
|
|
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
Livres en rapport
|
Derniers Blogs
L'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIESL'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIES par odewit
La tendance est aux interfaces naturelles (NUI), et le keynote de Bill Buxton au MIX l'a bien souligné.
La charte graphique et ergonomique de Windows Phone 7 a donc été entièrement repensée en vue d'obtenir un maximum d'efficacité sur ce point. En re...
Cliquez pour lire la suite de l'article par odewit COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|