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

Moteurs 3D Discussion :

Orientation et Rotation camera 3D


Sujet :

Moteurs 3D

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Orientation et Rotation camera 3D
    Salut,

    Je suis entrain d'écrie un programme qui me génère un script pour effectuer des " script cam " dans un environnement 3d ( Style quake ) à partir de coordonnées qu'on récupère dans cet environnement.
    Mais j'ai un soucis, les rotations de la camera ( pour l'instant je me contente des rotations de gauche à droite et inversement) sont " hachés ou Saccadé " lorsqu'on passe d'un point a l'autre.

    Connaissez vous un algo qui permet de rendre ces mouvements plus " Lisse "

    Merci

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    Pour que le movement de la camera soitfluide utilise la formule suivante :
    Camera1 à l'instant t1
    Camera2 à l'instant t2
    T = t2-t1 temps écoulé de la transition camera1->camera2
    Camera à l'instant t = ((t2-t)*Camera1+(t-t1)*camera2)/T
    faite le calcule pour les 2 vecteurs Eye, Target

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Merci pour la réponse mais si la valeur récupérée est l'angle de la caméra exemple .

    P0 = 10°
    P1 = -92°
    P2 =-160°

    Je fait comment car dans le cas qui nous intéresse ce sont des angles qu'on
    récupère.

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    faite la meme chose
    - cas lineaire
    partitionne la fonction en 2 cycles
    1 cycle t1<=t<=t2
    T = t2-t1;
    P(t) = ((t2-t)*P0+(t-t1)*P1)/T
    2 cycle t2<=t<=t3
    T = t3-t2;
    P(t) = ((t3-t)*P1+(t-t2)*P2)/T
    sinon (cas non lineaire ) le nombre de points >=3
    faite l'interpolation pour n points avec la fonction de Bezier
    P(t) = Somme[Combinatoire(n,i)*P[i]* t^i*(1-t)^(n-i), i=0 , i<=n-1]
    remarque : pour n = 2 on retombe sur le 1er cas

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Ok merci mais j'ai une question

    Vue que je n'impose pas de temps, il faut déterminer un nombre de point max pour créer le script, plus il y a de point et plus le temps total de l'animation sera long ( c'est le Nb de FPS qui déterminera ça et c'est indépendant du script )

    Je m'explique si j'ai pointé 10 points dans l'environnement, avant de créer le script on va lui donner le nombre total de points qu'on veut, admettons 1000 points.

    Ensuite je calcul la longueur total des segment de p0 à p0+10, et je reparti mes 1000 ponts entre mes segment en respectant la taille de chaque segment afin d'avoir une vitesse qui ne subit aucune variation de vitesse dans le temps et cela du 1er au dernier point.
    Jusqu'ici tout fonctionne comme prévu, que ce soit avec une interpolation linéaire ou autre.

    Mais a partir de là comment déterminer T ?
    pour l'instant je me dit si je suis sur P3, je me dit que T = Nbpoint de 0 à P3.
    est ce que mon raisonnement est juste ?

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    si je comprend bien ne cherche pas à calaculer le temps
    travail avec T = 1 est faite les interpolations pour chaque segment
    pour la ieme
    decoupe ton segment en n points
    0=<t<=1 t = 0,1/n,2/n,.....,(n-1)/n, 1
    Pi(t) = (1-t)*p(i)+t*p(i+1)
    et tu n'es pas obligé de travailer avec le temps

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Je vais résumer ce que je fait:

    si on a P0 à P10 et qu'on veut 1000 points:

    Pour déterminer le nombre de points entre chaque segment:

    1: je calcul la longueur total des segments comme suit

    Début Boucle = 0 à Nombre de point ( ici 10 )
    Px = Pn+1x - Pnx
    py = Pn+1y - PnY
    pz = Pn+1z - Pnz
    Resultat = Math.Sqrt((X ^ 2) + (Y ^ 2) + (Z ^ 2))
    puis on sauve Resultat du segment dans un tableau ( TabResult )
    Boucle pour calculer la longueur suivante

    Je connais la taille de chaque segment
    Maintenant je peux savoir combien de point je doit repartir par " Unité de segment"

    2 je calcule la somme de tout les segments = Taille Total des Segments
    puis je détermine le nombre de point par unité de segment

    Nb Point Par Unité = 1000 / Taille Tota des Segments

    3 A partir de la je peux calculer les points intermédiaires

    NbPointsup = Nb Point Par Unité * Taille Segment ( de n à n+1 sauvé dans TabResult )

    4 Je peux Calculer mes point intermédiaire du segment en cours de traitement
    soit par interpolation linéaire soit par spline

    5 et ici pour déterminer t je fais:

    t = t + (1 / NbPoitSup)

    Voilà pour les coordonnées X, Y et Z

    Tout ça marche très bien je peux faire ce que je veux les mouvement sont OK.
    ---------------------------------------------------------------------
    Ensuite il me reste à traite l'orientation de la camera, comme je l'ai dit je récupère X,Y, Z et l'angle ( entre 0) et 180 ° ) qui correspond à l'orientation de la camera lorsque j'ai pointé la coordonné

    Donc pour cette partie qui n'a pas était des plus simple il fallait que je détermine dans quel sens tourne ma caméra pour aller de l'AngleA à l'AngleB

    Exemple
    AngleA = -160°
    AngleB = 97°
    La camera doit tourner dans le sens horaire

    AngleA = -25°
    AngleB = 30°
    La camera doit tourner dans le sens trigo

    maintenant il me reste plus qu'à traiter les point entre ces angles pour que le mouvment soit " moins cassé " lors du passage d'un arc de cercle à à autre.

    Voilà j'ai donné tous les éléments qui explique le cheminement exact et il reste le dernier point à régler.

    Penses tu que l'algo que tu m'as donné peut être utiliser pour calculer le dernier point ?

    Merci

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    faite attention pour les angles car si on passe de -160 à 97 tu as 2 choix pour le sens de la vitesse angulaire si
    1 - omega>0 (sens trigo) ->detaTETA >0 -> angleB-angleA >0 -> angleA <angleB -160<97 aucun probleme
    mais si omega<0 ->detaTETA <0 -> angleB-angleA <0 -> angleA> angleB
    dans ce cas 97 doit etre convertie à une valeur negative 97 -> 97-360
    pour remplire la condition et enfin l'interpolation ne casse pas
    tout depend du choix de la vitesse angulaire
    resumons la condition pour le control des angles
    omega>0 condition AngleB> AngleA
    omega<0 condition AngleB<AngleA

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    En fait pour déterminer le sens de l'orientation je me sert du sens des segments et de l'angle récupéré et tout ça fonctionne très bien.
    A aucun moment le sens de rotation calculé par rapport à la direction d'un segment à l'autre est erroné.

    Pour info supplémentaire, lors du calcul des angles je travail sur 360° avant de convertir la valeur calculée (entre 0, 90, -90 et +/-180° ) pour l'intégrer au script.

    Jusqu'ici tout est bon et je me heurte au seul problème du passage, lors d'un mouvement, "d'un arc de cercle" à un autre.

    Quand je calcul mes points j'ai une rotation normal et dès que je change d'angle ou de sens, il y a comme une cassure dans le mouvement ( comme quand on regarde une poule tourner la tète , elle s'arrête net puis repart )
    et c'est ça ce que je veux supprime, afin d'avoir un mouvement plus gracieux.


    Concernant le choix de la vitesse angulaire je n'ai rien defini carpour l'instant je ne sais pas quel algo utiliser pour parvenir à mes fins.

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    Jusqu'à maintenant je ne cerne pas exactement le probleme si tu peux me faire une representation graphique des 2 arcs avec un peu plus de detail ça sera tres simple d'éclaircir vos idées et peut etre on pourra trouver la faille

Discussions similaires

  1. Rotation de la camera en java3D
    Par cereal dans le forum 3D
    Réponses: 2
    Dernier message: 04/12/2008, 16h38
  2. Rotation de la Camera, j'y arrive pas!
    Par zitezitoun dans le forum OpenGL
    Réponses: 6
    Dernier message: 24/04/2008, 00h11
  3. Camera, rotation et zoom
    Par XemHA dans le forum OpenGL
    Réponses: 0
    Dernier message: 11/03/2008, 14h35
  4. rotation camera glutlookat
    Par hysah dans le forum OpenGL
    Réponses: 3
    Dernier message: 03/04/2006, 11h07
  5. calculs mathematiques : rotation camera
    Par zax-tfh dans le forum OpenGL
    Réponses: 8
    Dernier message: 09/01/2006, 13h20

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