Je suis en pleine semaine de travaille pour mon projet de fin d’année.

Je travaille avec Delphi 2007 et OpenGL.

Je me retrouve confronter à une difficulté, celle de détecter une pente.



Dans ce jeu de voiture il y aura un passage de profile (d’où l’échelle bizarre). Mais c’est pas important dans la mesure où il y aura des pentes avec vu derrière le véhicule. C’est juste un détaille

Pour le code, j’ai utilisé 2 procédures pour dessiner mes surfaces qui sont en faite de gros rectangle, je met les cordonner x,y,z et il est dessiner ou je veux.

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
procedure bloc (x1,x2,y1,y2,z1,z2 : GLFloat; TexID1, TexID2, TexID3 : GLUint);
begin
    glBindTexture (GL_TEXTURE_2D, TexID1);
    glBegin(GL_QUADS);
 
      //gauche
      glTexCoord2i (1, 0);glVertex3f(   x2,  y1, z1);
      glTexCoord2i (0, 0);glVertex3f(   x1,  y1, z1);
      glTexCoord2i (0, 1);glVertex3f(   x1,  y1, z2);
      glTexCoord2i (1, 1);glVertex3f(   x2,  y1, z2);
      //droite
      glTexCoord2i (1, 1);glVertex3f(   x2,   y2, z2);
      glTexCoord2i (0, 1);glVertex3f(   x1,   y2, z2);
      glTexCoord2i (0, 0);glVertex3f(   x1,   y2, z1);
      glTexCoord2i (1, 0);glVertex3f(   x2,   y2, z1);
 
    glEnd();
 
    glBindTexture (GL_TEXTURE_2D, TexID2);
    glBegin(GL_QUADS);
      //Derriere
      glTexCoord2i (1, 0);glVertex3f(   x2,    y1, z2);
      glTexCoord2i (0, 0);glVertex3f(   x2,    y2, z2);
      glTexCoord2i (0, 1);glVertex3f(   x2,    y2, z1);
      glTexCoord2i (1, 1);glVertex3f(   x2,    y1, z1);
 
      //Face
      glTexCoord2i (1, 0);glVertex3f(   x1,    y1, z1);
      glTexCoord2i (0, 0);glVertex3f(   x1,    y2, z1);
      glTexCoord2i (0, 1);glVertex3f(   x1,    y2, z2);
      glTexCoord2i (1, 1);glVertex3f(   x1,    y1, z2);
    glEnd;
 
    glBindTexture (GL_TEXTURE_2D, TexID3);
    glBegin(GL_QUADS);
      //toit
      glTexCoord2i (0, 1);glVertex3f(   x1,    y1, z2);
      glTexCoord2i (1, 1);glVertex3f(   x2,    y1, z2);
      glTexCoord2i (1, 0);glVertex3f(   x2,    y2, z2);
      glTexCoord2i (0, 0);glVertex3f(   x1,    y2, z2);
    glEnd();
      ///sol
    glBegin(GL_QUADS);
      glVertex3f(   x1,    y1, z1);
      glVertex3f(   x1,    y2, z1);
      glVertex3f(   x2,    y2, z1);
      glVertex3f(   x2,    y1, z1);
    glEnd;
 
 
end;
 
 
 
 
 
procedure blocD (x1,x2,y1,y2,z1,z2,h : GLFloat; TexID1, TexID2, TexID3 : GLUint);
 
begin
    glBindTexture (GL_TEXTURE_2D, TexID1);
    glBegin(GL_QUADS);
 
      //gauche
      glTexCoord2i (1, 0);glVertex3f(   x2+h,  y1, z1+h);
      glTexCoord2i (0, 0);glVertex3f(   x1,  y1, z1);
      glTexCoord2i (0, 1);glVertex3f(   x1,  y1, z2);
      glTexCoord2i (1, 1);glVertex3f(   x2+h,  y1, z2+h);
      //droite
      glTexCoord2i (1, 1);glVertex3f(   x2+h,   y2, z2+h);
      glTexCoord2i (0, 1);glVertex3f(   x1,   y2, z2);
      glTexCoord2i (0, 0);glVertex3f(   x1,   y2, z1);
      glTexCoord2i (1, 0);glVertex3f(   x2+h,   y2, z1+h);
 
    glEnd();
 
    glBindTexture (GL_TEXTURE_2D, TexID2);
    glBegin(GL_QUADS);
      //Derriere
      glTexCoord2i (1, 0);glVertex3f(   x2+h,    y1, z2+h);
      glTexCoord2i (0, 0);glVertex3f(   x2+h,    y2, z2+h);
      glTexCoord2i (0, 1);glVertex3f(   x2+h,    y2, z1+h);
      glTexCoord2i (1, 1);glVertex3f(   x2+h,    y1, z1+h);
 
      //Face
      glTexCoord2i (1, 0);glVertex3f(   x1,    y1, z1);
      glTexCoord2i (0, 0);glVertex3f(   x1,    y2, z1);
      glTexCoord2i (0, 1);glVertex3f(   x1,    y2, z2);
      glTexCoord2i (1, 1);glVertex3f(   x1,    y1, z2);
    glEnd;
 
    glBindTexture (GL_TEXTURE_2D, TexID3);
    glBegin(GL_QUADS);
      //toit
      glTexCoord2i (0, 1);glVertex3f(   x1,    y1, z2);
      glTexCoord2i (1, 1);glVertex3f(   x2+h,    y1, z2+h);
      glTexCoord2i (1, 0);glVertex3f(   x2+h,    y2, z2+h);
      glTexCoord2i (0, 0);glVertex3f(   x1,    y2, z2);
    glEnd();
      ///sol
    glBegin(GL_QUADS);
      glVertex3f(   x1,    y1, z1);
      glVertex3f(   x1,    y2, z1);
      glVertex3f(   x2+h,    y2, z1+h);
      glVertex3f(   x2+h,    y1, z1+h);
    glEnd;
 
end;
ensuite pour dessiner :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
  bloc(10,-60,-5,5,-5,-1,texte,egypte,sumerien);
  blocD(-60,-100,-5,5,-5,-1,-50,texte,egypte,sumerien);

J’ai eu l’idée de faire des testes :
si -60>x>-61 et 0>z>-1 alors
z :=x+60 ;

Comme x varie, z variera, mais un problème ce pose :
Comme le vaisseau devra sauter, si il passe par dessus cette coordonné, je fais quoi ? De plus je ne vais pas englober toute la pente car il y aura des autres pistes autours, et sa va pas marcher.


Voila je souhaiterais avoir une idées sur ce problème
Merci