Bonjour tout le monde,
voilà je me suis récemment mis aux VBO, tout marche bien sauf quand j'essaye d'utiliser les index.

Voilà le code source:
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#include <iostream>
#include <SDL/SDL.h>
#include <GL/GLee.h>
#include <GL/glu.h>
#include "constantes.h"
 
 
#define BUFFER_OFFSET(a) ((char*)NULL + (a))
 
 
//! Constantes de la forme.
const unsigned int NB_VERT = 8;
const unsigned int NB_INDEX = 24;
const unsigned int V_SIZE = 3;
const unsigned int C_SIZE = 3;
const unsigned int I_SIZE = 1;
 
float vertices[NB_VERT*V_SIZE] = {
    -1.f, -1.f, -1.f,
    1.f, -1.f, -1.f,
    1.f, 1.f, -1.f,
    -1.f, 1.f, -1.f,
    -1.f, -1.f, 1.f,
    1.f, -1.f, 1.f,
    1.f, 1.f, 1.f,
    -1.f, 1.f, 1.f
};
 
float colors[NB_VERT*C_SIZE] = {
    1.f, 0.f, 0.f,
    0.f, 1.f, 0.f,
    0.f, 0.f, 1.f,
    1.f, 1.f, 0.f,
    1.f, 0.f, 1.f,
    0.f, 1.f, 1.f,
    0.5f, 0.2f, 0.8f,
    0.8f, 0.4f, 0.1f
};
 
float index[NB_INDEX*I_SIZE] = {
    0, 1, 2, 3, // Face du bas
    1, 2, 6, 5, // Face de devant
    2, 3, 7, 6, // Face de droite
    6, 7, 4, 5, // Face du dessus
    0, 1, 5, 4, // Face de gauche
    0, 3, 7, 4 // Face de derrière.
};
 
GLuint verticesBuffer;
GLuint colorsBuffer;
GLuint indexBuffer;
 
 
//! Initialiser SDL.
bool initSDL();
 
//! Initialiser OpenGL.
bool initOpenGL();
 
//! Dessiner la scène.
void drawScene();
 
 
int main(int argc, char** argv) {
    // Initialiser les bibliothèques utilisées.
    if (!initSDL() || !initOpenGL())
        return EXIT_FAILURE;
 
    atexit(SDL_Quit);
 
    SDL_Event event;
    bool running = true;
 
    // Boucle principale.
    while (running) {
        // Traitement des evenements.
        while (SDL_PollEvent(&event)) {
            // Fermeture de la fenêtre.
            if (event.type == SDL_QUIT)
                running = false;
 
            // Appuie touche.
            if (event.type == SDL_KEYDOWN) {
                // Touche echape -> fermeture application.
                if (event.key.keysym.sym == SDLK_ESCAPE)
                    running = false;
            }
        }
 
        // Dessiner la scène.
        drawScene();
    }
 
    // Supprimer les buffers.
    glDeleteBuffers(1, &colorsBuffer);
    glDeleteBuffers(1, &verticesBuffer);
    glDeleteBuffers(1, &indexBuffer);
 
    return EXIT_SUCCESS;
}
 
 
bool initSDL() {
    // Initialiser le mode vidéo.
    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        std::cerr << "Erreur: le mode video n'a pu etre initialise." << std::endl;
        return false;
    }
 
    // Définir le titre de la fenêtre.
    SDL_WM_SetCaption(WIN_T.c_str(), NULL);
 
    // Ouvrir la fenêtre avec un contexte OpenGL.
    SDL_Surface* screen = SDL_SetVideoMode(WIN_W, WIN_H, WIN_BPP, SDL_OPENGL);
    if (screen == NULL) {
        std::cerr << "Erreur: " << SDL_GetError() << std::endl;
        return false;
    }
 
    return true;
}
 
 
bool initOpenGL() {
    // Définir la couleur d'arrière plan.
    glClearColor(0.f, 0.70f, 0.35f, 0.f);
 
    // Activer l'écriture dans le z-buffer.
    glEnable(GL_DEPTH_TEST);
    glClearDepth(1.f);
 
    // Définir le mode de projection.
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(40.f, (double)WIN_W/WIN_H, 1.0, 50.0);
 
    // Création des buffer.
    glGenBuffers(1, &colorsBuffer);
    glGenBuffers(1, &verticesBuffer);
    glGenBuffers(1, &indexBuffer);
 
    // Chargement des données dans le colors buffer.
    glBindBuffer(GL_ARRAY_BUFFER, colorsBuffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(float)*NB_VERT*C_SIZE, NULL, GL_STATIC_DRAW);
    glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(float)*NB_VERT*C_SIZE, colors);
 
    // Chargement des données dans le vertices buffer.
    glBindBuffer(GL_ARRAY_BUFFER, verticesBuffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(float)*NB_VERT*V_SIZE, NULL, GL_STATIC_DRAW);
    glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(float)*NB_VERT*V_SIZE, vertices);
 
    // Chargement des données dans l'index buffer.
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int)*NB_INDEX*I_SIZE,
        NULL, GL_STREAM_DRAW);
    glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, sizeof(unsigned int)*NB_INDEX*I_SIZE,
        index);
 
    // Activer le tableaux de sommet et de couleur.
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);
 
    return true;
}
 
 
void drawScene() {
    // Vider les tampons.
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
    // Placer la caméra.
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(3.f, 3.f, 3.f, 0.f, 0.f, 0.f, 0.f, 0.f, 1.f);
 
    // Spécification du buffer de couleur.
    glBindBuffer(GL_ARRAY_BUFFER, colorsBuffer);
    glColorPointer(C_SIZE, GL_FLOAT, 0, BUFFER_OFFSET(0));
 
    // Spécification du buffer de sommet.
    glBindBuffer(GL_ARRAY_BUFFER, verticesBuffer);
    glVertexPointer(V_SIZE, GL_FLOAT, 0, BUFFER_OFFSET(0));
 
    // Dessiner le carré.
   glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
   glDrawElements(GL_QUADS, NB_INDEX, GL_UNSIGNED_INT, BUFFER_OFFSET(0));
   glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
 
    // Mettre à jour la fenêtre.
    glFlush();
    SDL_GL_SwapBuffers();
}
Et donc quand je lance l'application, j'ai l'arrière plan et rien d'autre (alors que je devrai avoir un cube). Pourriez-vous me dire ce que j'ai mal fait dans ce code ?

Merci d'avance !