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

Windows Discussion :

[OpenGL] probleme rotations/ translations


Sujet :

Windows

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [OpenGL] probleme rotations/ translations
    Bonjour, je commence a coder un programme en OpenGL avec Delphi (je debute en infographie). J'ai enfin reussi a faire apparaitre un superbe cube en 3D, et a faire des translations avec le clavier, et j'en suis arrive aux rotations dans l'espace que j'ai reussi a coder assez facilement.
    Le probleme maintenant :

    avec les translations il n'y avait pas de problemes, tout se passait comme je le voulais
    depuis que j'ai mis les rotations, le probleme est que mon repere se deplace, et que si je fait une rotation a 180 degres par exemple, ma touche qui servait a avancer servira a reculer ....

    voici mes fonctions :

    Translation :

    procedure trans_cam(a : real);

    begin
    if (glfwgetkey(90) = 1) or (glfwgetkey(87)= 1) then // W et Z
    gltranslate(a,0,0);

    if (glfwgetkey(65) = 1) or (glfwgetkey(81)= 1) then //A et Q
    gltranslate(0,-a,0);

    if (glfwgetkey(83) = 1) then //S
    gltranslate(a,0,0);

    if (glfwgetkey(68) = 1) then //D
    gltranslate(0,a,0);

    end;

    Rotation :
    procedure mouv_mouse(sensi_mouse : real);

    var
    x_m, y_m, angle_x, angle_y : integer;

    begin
    glfwGetMousePos(x_m, y_m);
    glfwSetMousePos(400,300);
    angle_x := x_m-400;
    angle_y := y_m-300;
    if (angle_x<>0) or (angle_y<>0) then
    begin
    glrotate(sensi_mouse*angle_x,0,0,1);
    glrotate(-sensi_mouse*angle_y,0,1,0);
    end;
    Si quelqun pouvait m'eclairer sur ce point ca serait super

  2. #2
    Membre averti Avatar de zabibof
    Inscrit en
    Février 2007
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 188
    Points : 344
    Points
    344
    Par défaut
    Jettes un oeil à NeHe Lesson10

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    c'est en anglais j'ai un peu de mal avec ca si c'est technique

    bon sinon je viens d'essayer de coder ca differemment :

    procedure camera(var u, pos_x, pos_y, pos_z, look_x, look_y, look_z, angle_h, angle_v : real);
    var
    x,y : integer;
    begin
    glfwgetmousepos(x,y);
    glfwsetmousepos(400,300);
    angle_h := x-400;
    angle_v := y-300;
    if (angle_h<>0) or (angle_v <> 0) then
    begin
    look_x := look_x + cos(u);
    look_y := look_y + sin(u);
    end;



    glulookat(pos_x, pos_y, pos_z, look_x, look_y, look_z, 0, 0, 1);

    end;

    sinon voici ce qu'il y a dans mon dpr (je laisse que les truc importants pour vous faciliter la lecture) :

    var
    play : boolean;
    a,x,y: real;
    i : integer;
    u, pos_x, pos_y, pos_z, look_x, look_y, look_z, angle_h, angle_v : real;

    begin
    x := 0.1;
    y := 0.2;
    a:=0.002;
    pos_x := -3;
    pos_y := 0 ;
    pos_z := 0 ;
    look_x := pos_x + 1;
    look_y := 0 ;
    look_z := 0 ;
    angle_h:= 0 ;
    angle_v:= 1 ;
    u := 1;
    play := true;
    init();

    while play do
    Begin
    glClearColor(0.0,0.0,0.0,0.0);
    glClear(GL_COLOR_BUFFER_BIT);
    glClear(GL_DEPTH_BUFFER_BIT);

    camera(u, pos_x, pos_y, pos_z, look_x, look_y, look_z, angle_h, angle_v);
    glloadidentity;
    glfwswapbuffers();

    end;
    sinon vous pouvez acceder a ce que je fais ici pour plus de precisions

  4. #4
    Membre averti Avatar de zabibof
    Inscrit en
    Février 2007
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 188
    Points : 344
    Points
    344
    Par défaut
    Citation Envoyé par Daemonkii
    c'est en anglais j'ai un peu de mal avec ca si c'est technique
    Traduction ici

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    il y a juste un default : je suis en open gl .... le fonctions de translations/rotation font bouger ma camera par rapport au repere ... dans ce tuto, la camera reste au centre du repere.
    Je viens de passer tout mon vendredi apres midi a tenter de resourdre ce probleme, en vain

    voila ce que j'ai fait hier :

    procedure camera(var x_cam, y_cam, z_cam, {look_x, look_y, look_z,} angle_h, angle_v : real);

    var
    x,y : integer;
    sens_cam : real;
    sens_trans : real;

    begin
    sens_cam := 0.2;
    sens_trans := 0.002;
    glfwgetmousepos(x,y);
    glfwsetmousepos(400,300);
    angle_h := (angle_h + x - 400);
    angle_v := (angle_v + y - 300);

    if (glfwgetkey(90) = 1) or (glfwgetkey(87)= 1) // W et Z
    then

    begin
    x_cam := x_cam + sens_trans * cos(angle_h * pi/180);
    y_cam := y_cam - sens_trans * sin(angle_h * pi/180);
    end;

    if (glfwgetkey(65) = 1) or (glfwgetkey(81)= 1) //A et Q
    then
    begin
    x_cam := x_cam + sens_trans * cos(angle_h * pi/180);
    y_cam := y_cam + sens_trans * sin(angle_h * pi/180);
    end;

    if (glfwgetkey(83) = 1) //S
    then
    begin
    x_cam := x_cam - sens_trans * cos(angle_h * pi/180);
    y_cam := y_cam + sens_trans * sin(angle_h * pi/180);
    end;

    if (glfwgetkey(68) = 1) //D
    then
    begin
    x_cam := x_cam - sens_trans * cos(angle_h * pi/180);
    y_cam := y_cam - sens_trans * sin(angle_h * pi/180);
    end;

    glloadidentity;
    glrotated(sens_cam * angle_h,0,1,0);

    glulookat(x_cam, y_cam, z_cam,x_cam+1, y_cam, z_cam, 0, 0, 1);

    end;

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/09/2009, 19h27
  2. Réponses: 1
    Dernier message: 13/11/2006, 18h37
  3. Réponses: 2
    Dernier message: 09/01/2006, 16h53
  4. [3D] gérer la rotations&translations
    Par kiroukou dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 21/10/2005, 18h44
  5. Réponses: 4
    Dernier message: 31/03/2005, 10h33

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