Bonjour à tous,
J'ai déjà fait quelques programmes avec OpenGL 1.2, et maintenant je dois me mettre à jour avec les dernières nouveautés. J'ai donc écrit un bout de code qui génère un VBO à partir d'un obj et l'affiche grâce à un shader. L'écran restant toujours noir, j'ai simplifié au maximum mon code, mais rien ne s'affiche encore.
J'aurai donc besoin de votre aide, car je suis complétement bloquée, je ne vois pas où est le problème. Lorsque j'appelle glGetError(), il me retourne bien 0.
Voici un extrait du code où il me semble l'erreur doit se trouver. Je précise que pour l'instant il n'y a aucune camera et donc de gestion des matrices projection et view. Merci d'avance pour l'aide précieuse que vous pourrez m'apporter.
pour créer le VBO :
L'affichage :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 GLuint Renderer::makeBuffer(GLenum target, const void *buffer_data) { GLsizei buffer_size = sizeof(buffer_data); GLuint buffer; glGenBuffers(1, &buffer); glBindBuffer(target, buffer); glBufferData(target, buffer_size, buffer_data, GL_STATIC_DRAW); return buffer; } static const GLfloat vertex_data[] = { 1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, -1.0f, 1.0f }; this->m_infosRendu.vertex_buffer = myRenderer->makeBuffer(GL_ARRAY_BUFFER, vertex_data); static const GLushort element_data[] = {0, 1, 2, 2, 3, 0}; this->m_infosRendu.element_buffer = myRenderer->makeBuffer(GL_ELEMENT_ARRAY_BUFFER, element_data);
le vertex shader :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 void Renderer::drawObjet(Geometry *objet) { glUseProgram(m_infos_rendu.program); glm::vec3 couleur = glm::vec3(1.0, 0.0, 0.0); glVertexAttrib3fv(glGetAttribLocation(m_infos_rendu.program, "Color"), &couleur[0]); glBindBuffer(GL_ARRAY_BUFFER, objet->getVertexBuffer()); glEnableVertexAttribArray(m_infos_rendu.in.position); glVertexAttribPointer(m_infos_rendu.in.position, 4, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 4, (void*)0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, objet->getElementBuffer()); glDrawElements(GL_TRIANGLES, objet->getVertexCount(), GL_UNSIGNED_SHORT, (void*)0); glDisableVertexAttribArray(m_infos_rendu.in.position); SDL_GL_SwapBuffers(); }
le fragment shaderCode:
1
2
3
4
5
6
7
8
9
10
11 attribute vec4 Position; attribute vec3 Color; varying vec3 v_Color; void main() { gl_Position = Position; v_Color = Color.xyz; }
Code:
1
2
3
4
5
6
7
8 varying vec3 v_Color; void main() { gl_FragColor = vec4(v_Color,1.0); }