Bonsoir à tous;
J'essaie désespérément d'afficher une simple cube avec un fichier .obj. Ce fichier contient les vertices, les normals et les uvs.
Le chargement des valeurs ne pose pas de problème (les valeurs affichés dans la console correspondent aux fichier) mais je n'arrive pas à afficher ce petit cube
Le problème ne vient pas de la caméra puisque j'arrive à faire le rendu d'un cube avec les anciennes fonctions (glBegin etc...) et la position de la camera semble correspondre au rendu.
Donc j'en déduis qu'il y a de la casse au niveau de la VAO/VBO ou du shader...
//Upload des VBO et attribution des pointer au VAO:
(Les buffers sont de simple vector<GLfloat> avec les valeurs des vertices à la suite)
//DrawCall:
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 //VBO Vertex glGenBuffers(1, &VertexBufferID); glBindBuffer(GL_ARRAY_BUFFER, VertexBufferID); glBufferData(GL_ARRAY_BUFFER, sizeof(float) * buffer_vertices.size(), &buffer_vertices, GL_STATIC_DRAW); //VBO Normals glGenBuffers(1, &NormalBufferID); glBindBuffer(GL_ARRAY_BUFFER, NormalBufferID); glBufferData(GL_ARRAY_BUFFER, sizeof(float) * buffer_normals.size(), &buffer_normals, GL_STATIC_DRAW); //VBO UV glGenBuffers(1, &UVBufferID); glBindBuffer(GL_ARRAY_BUFFER, UVBufferID); glBufferData(GL_ARRAY_BUFFER, sizeof(float) * buffer_uvs.size(), &buffer_uvs, GL_STATIC_DRAW); //VAO glGenVertexArrays(1, &VertexArrayID); glBindVertexArray(VertexArrayID); //Configurer la VAO //Vertices glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, VertexBufferID); glVertexAttribPointer((GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, 0); //UVs glEnableVertexAttribArray(1); glBindBuffer(GL_ARRAY_BUFFER, UVBufferID); glVertexAttribPointer((GLuint)1, 2, GL_FLOAT, GL_FALSE, 0, 0); //Normals glEnableVertexAttribArray(2); glBindBuffer(GL_ARRAY_BUFFER, NormalBufferID); glVertexAttribPointer((GLuint)2, 3, GL_FLOAT, GL_FALSE, 0, 0); //Desactiver le VAO et VBO glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindVertexArray(0);
Et les shaders,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 //m_staticmesh[i]->GetMaterial()->shader->Use(); GLuint ProgramID = m_staticmesh[i]->GetMaterial()->shader->GetProgram(); glUseProgram(ProgramID); GLuint MVPid = glGetUniformLocation(ProgramID, "MVP"); glUniformMatrix4fv(MVPid, 1, GL_FALSE, &m_activecamera->MVP()[0][0]); Mesh* mesh = m_staticmesh[i]->GetMesh(); glBindVertexArray(m_staticmesh[i]->GetMesh()->GetVAO()); //GetVAO() retourne l'id de la vao du mesh glDrawArrays(GL_TRIANGLES, 0, mesh->vertices.size()); glBindVertexArray(0); glUseProgram(0);
Vertex:
Fragment:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #version 400 core layout(location = 0) in vec3 VertexPosition; layout(location = 1) in vec2 UV; layout(location = 2) in vec3 Normal; uniform mat4 MVP; void main() { gl_Position = MVP * vec4(VertexPosition,1); }
Merci !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #version 400 core out vec4 color; void main() { color = vec4(1,0,0,1); }
Partager