IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GLUT Discussion :

Caméra, rotation: problème acos()


Sujet :

GLUT

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Par défaut Caméra, rotation: problème acos()
    Bonjour!
    J'essaie d'écrire une caméra, mais j'ai un problème pour effectuer une rotation.
    J'aimerais une rotation qui:
    -vise toujours le point (0,0,0)
    -reste à la même distance du point (0,0,0)
    -voyage sur le cercle du plan définit par l'axe y et la position de la caméra

    Je l'est écrite, elle marche, mais elle refuse de faire un tour complet.
    Le problème vient certainement de l'acos(...)(ou peut-être de atan2(...)).

    C'est un problème de trigo mais je me suis perdue... à l'aide!

    Voici ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    void Camera::rotationvert(int sens)
    {
    	double theta(0), phi(0), r(0);
     
    	r = sqrt((xpos*xpos) + (ypos*ypos) + (zpos*zpos));
     
    	phi = acos(ypos/r);
    	theta = atan2(xpos,zpos);
     
    	phi += sens*angle;
     
    	zpos = r*sin(phi)*cos(theta);
    	xpos = r*sin(phi)*sin(theta);
    	ypos = r*cos(phi);
     
    }
    (angle=0.05 et sens=1 ou -1)

  2. #2
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Par défaut
    ton angle=0.05, c'est en deg ou radians ??
    car les fonctions trigo sont definies pour des radians...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Par défaut
    Oui, l'angle est bien en radian. Il s'agit en fait d'un "pas".
    J'appelle ensuite la rotation par un événement clavier.

  4. #4
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Par défaut
    mais si tas fonction effectue uniquement un increment, alors le fait que la rotation ne soit pas complete ne vient pas de la ...mais plutot de l'endroit ou tu fais le call

  5. #5
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Intuitivement je dirais plutôt que la formule bloque quand l'angle dépasse le cercle trigo, il faudrait essayer de revenir à 0 quand tu dépasses 2PI.
    D'autre part, je ne comprends pas, ta fonction permet juste de rotater la camera dans le repère global dans le plan circulaire mais pas sur elle-même pour viser le point 0,0,0 ? En fait j'imagine que tu fais ca après ^^

  6. #6
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    normalement pour faire ce que tu souhaites :
    - tu n'as pas besoin de toucher la coordonnée en Y (voyage sur le cercle du plan définit par l'axe y et la position de la caméra).
    - donc tu as x=R cos (theta) et z = R sin (Theta), avec R le Rayon du cercle.
    - Si Phi représente l'angle entre le plan XY et la droite passant par (0, 0, 0) et (Xpos, Ypos, Zpos), alors R = r cos (Phi).


    Normalement, même quand on souhaite tourner autour d'un objet tout en restant dans un plan parallèle à un plan formé par deux axes du repère (ou dis autrement quand on souhaites tourner autour d'un axe), on utilise plutôt une matrice de rotation 3D. Tu choisis l'axe autour duquel tu tournes, tu remplies ta matrice et tu la multiplies aux coordonnées de ta caméra rentrée sous forme de vecteur.
    Regarde un cours sur les matrice de rotation ou les coordonnées projectives.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/11/2012, 10h52
  2. Rotation: problème d'AffineTransformOp
    Par Relyss dans le forum 2D
    Réponses: 0
    Dernier message: 09/11/2009, 18h56
  3. Problème lors de rotation de la caméra
    Par cayou66 dans le forum OpenSceneGraph
    Réponses: 8
    Dernier message: 28/08/2009, 11h24
  4. Caméra, rotation et quaternions
    Par korsakoff69 dans le forum DirectX
    Réponses: 6
    Dernier message: 03/11/2008, 11h04
  5. Problème de rotation
    Par Francky033 dans le forum DirectX
    Réponses: 1
    Dernier message: 17/07/2003, 16h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo