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

OpenGL Discussion :

Rotation de la Camera, j'y arrive pas!


Sujet :

OpenGL

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Rotation de la Camera, j'y arrive pas!
    Bonjour,

    Si je viens écrire ici c’est que j’ai vraiment cherché, mais en vains, j’ai lu les anciens messages du forum, fait des recherches sur Google … J’aurais du réussir a la faire il y a longtemps, puisque j’ai démarré le projet depuis décembre.

    En fait j’ai besoin de faire tourner ma camera dans tous les sens, le clavier suffit. Et comme je fait un jeu de voiture, il faut que la camera soit deriere le cube. Sa c'est facile pour les translation (les variables qui déplace mon cube je les met dans glLookAt dans la position et le l'endroit fixé), par contre pour les rotations je sais pas si c'est pareil.

    J’utilise Delphi, OpenGL et GLFW.

    J’ai essayé des formules de trigo, mais je pense que ce n’est pas vraiment sa, car la camera tourne mais de manière étrange. Je vous montre le code avec une surface et un cube, j'ai mis le plus utile.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    
    program Cube;
    
    {$APPTYPE CONSOLE}
    
    uses
      SysUtils,
      OpenGL,
      GLFW ;
    
    const
      LARGEUR = 800;
      HAUTEUR = 600;
      FAVY = 70;
      RATIO = LARGEUR / HAUTEUR;
      MIN = 1;
      MAX = 100;
    
    var
      n, r, px, py : GLFloat;
    
    begin
    
    //initialisation
      glfwInit ();
      glfwOpenWindow (LARGEUR, HAUTEUR, 0, 0, 0, 0, 42, 0, GLFW_WINDOW);
      glfwSetWindowTitle('Speed Light');
    
      glEnable (GL_DEPTH_TEST);
      glEnable (GL_Texture_2D);
    
      glMatrixMode (GL_PROJECTION);
      glLoadIdentity ();
      gluPerspective (FAVY, RATIO, MIN, MAX);
    
      n := 0;
      r := 0;
      px := 0;
      py := 0;
    
      while exit = 0 do
        begin
    
    //les touches
          exit := glfwGetKey (GLFW_KEY_ESC);
    
          if (glfwGetKey (GLFW_KEY_RIGHT) = 1) then
            r := r + 0.1;
    
          if (glfwGetKey (GLFW_KEY_LEFT) = 1) then
            r := r - 0.1;
    
          if (glfwGetKey (GLFW_KEY_UP) = 1) then
            n := n - 0.1;
    
          if (glfwGetKey (GLFW_KEY_DOWN) = 1) then
            n := n + 0.1;
    
    //et les fameuses formules de triggo (rigoler pas !)
         
          px := n * cos (r);
          py := n * sin (r);
    
    
          glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
    
    
          glMatrixMode (GL_MODELVIEW);
          glLoadIdentity ();
          gluLookAt (4+px, py, 4+posz, px, py, 0, 0, 0, 1);
    
    
    
    //un cube
          glPushMatrix ();
          glTranslatef (transx1, transy1, transz1);
    
          glBegin (GL_QUADS);
    
            glColor3ub (144, 0, 144);
            glVertex3f (1, 0, 1);
            glVertex3f (1, 1, 1);
            glVertex3f (1, 1, 0);
            glVertex3f (1, 0, 0);
    
            glColor3ub (144, 144, 0);
            glVertex3f (1, 1, 1);
            glVertex3f (0, 1, 1);
            glVertex3f (0, 1, 0);
            glVertex3f (1, 1, 0);
    
            glColor3ub (0, 144, 144);
            glVertex3f (0, 1, 1);
            glVertex3f (0, 0, 1);
            glVertex3f (0, 0, 0);
            glVertex3f (0, 1, 0);
    
            glColor3ub (144, 0, 0);
            glVertex3f (0, 0, 1);
            glVertex3f (1, 0, 1);
            glVertex3f (1, 0, 0);
            glVertex3f (0, 0, 0);
    
            glColor3ub (0, 144, 0);
            glVertex3f (0, 0, 1);
            glVertex3f (0, 1, 1);
            glVertex3f (1, 1, 1);
            glVertex3f (1, 0, 1);
    
            glColor3ub (0, 0, 144);
            glVertex3f (0, 0, 0);
            glVertex3f (0, 1, 0);
            glVertex3f (1, 1, 0);
            glVertex3f (1, 0, 0);
          glEnd ();
    
          glPopMatrix ();
    
    
    //Une surface
          glPushMatrix ();
    
          glBegin (GL_QUADS);
          glColor3ub (111, 0, 0); glVertex3f (-25, -25, 0);
          glColor3ub (111, 0, 111); glVertex3f (25, -25, 0);
          glColor3ub (11, 111, 111); glVertex3f (25, 25, 0);
          glColor3ub (11, 111, 11); glVertex3f (-25, 25, 0);
          glEnd ();
    
          glPopMatrix;
    
          glfwSwapBuffers ();
        end;
        glfwTerminate ();
    end.


    J’ai beaucoup lu des théories, des explications mathématiques, et des codes en C/C++ (langage que je ne maitrise pas).
    Cependant je n’y arrive pas !
    Le problème viens du niveau des formules c’est bien sa ?

    Je souhaiterai avoir votre aide, merci.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    je sais qu'il y a des sujets sur le forum, mais sa ne m'aide vraiment pas.
    Surtout que je programme depuis quelques mois, et en particulier du delphi (enfin vite fait)

  3. #3
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Points : 422
    Points
    422
    Par défaut
    salut

    pour ça j'utilise une fonction

    vector rotate(vector vec, float angle, vector axe) {
    }

    qui fait tourner un vecteur "vec" de "angle" degrés autour d'un "axe"

    c'est pas dur à coder et je peux te donner le code de cette fonction sinon

    il faut:
    - normaliser axe
    - faire le produit scalaire Y = vec.axe
    - Y*axe c'est la composante dans la direction axe de vec
    on a: a = Y*axe et b = vec - Y*axe
    on a donc vec = a + b
    quand on fait tourner vec autour de axe, la partie de vec parallèle à axe ne changera pas, seule la partie perpendiculaire tournera
    donc rotate(vec,angle,axe) = a + rotate(b,angle,axe)

    ensuite tu calcules dirX = normalize(b)
    et dirZ = b x axe (produit vectoriel)

    tu calcules X = norme(b)
    et finalement rotate(vec,angle,axe) = (cos(angle)*dirX + sin(angle)*dirZ)*norme(b) + a


    si tu as des question n'hésite pas, ha oui il y a une chance sur deux pour que ça fasse tourner de "-angle" au lieu de "angle" degrés, dans ce cas c'est que je me suis trompé il faut calculer axe x b au lieu de b x axe
    Renaud

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    merci beaucoup pour ta réponse

    mon emploie du temps des cours ne me permet pas de coder la semaine, mais je pense que mercredi soir, assez tard je pourrais, je te mettrais au courant.

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    pourrais tu me donner le code de la fonction vecteur

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    au faite, je suis toujours intéréssé

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    bon j'ai ma camera en 1er personne, j'ai cherché des formules de trigo

    mais j'ai besoins qu'elle suive une voiture en faite, j'arrive pas a synchroniser la rotation de la cam avec celle de la voiture

    j'espère que quelqu'un pourra me l'expliquer

Discussions similaires

  1. [Kylix 3] Je n'arrive pas à utiliser MySQL
    Par usebob dans le forum EDI
    Réponses: 4
    Dernier message: 15/04/2005, 11h18
  2. problème que je n'arrive pas à résoudre de façon récursive
    Par miam dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 31/07/2004, 12h21
  3. [Function] N'arrive pas à sortir
    Par bouboussjunior dans le forum ASP
    Réponses: 3
    Dernier message: 14/06/2004, 17h36
  4. Je n'arrive pas à détruire une fenêtre
    Par CORREGE Frédéric dans le forum MFC
    Réponses: 6
    Dernier message: 22/02/2004, 21h28
  5. j'arrive pas a arreter mon thread d'arriere-plan
    Par ms91fr dans le forum Langage
    Réponses: 6
    Dernier message: 06/06/2003, 22h36

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