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 : 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 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 : 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 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 shader
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 varying vec3 v_Color; void main() { gl_FragColor = vec4(v_Color,1.0); }
Partager