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.