Bonjour,
je suis entrain d'essayer de faire un petit moteur 3D et je me basait un tuto (opengl 3.3). j'ai fait en sorte qu'il lise les obj, j'essaye de charger un cube et là problème : écran noir rien ne s'affiche. dans le shader j'ai remplacé out_Color = texture(tex, coordTexture); par out_Color = vec4(1.0,1.0,1.0,1.0); juste pour voir et mon cube s'affichait en blanc. j'ai vérifié et le "liseur d'obj" fonctionne bien donc le problème doit être ailleurs.
voici le code :
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
Object::Object(std::string const vertexShader, std::string const fragmentShader, std::string texture, std::string obj) : m_shader(vertexShader, fragmentShader), m_vboID(0), m_vaoID(0), m_texture(texture)
{
    // Chargement du shader
    loadOBJ(obj, m_vertices, m_uvs, m_normals);
    m_shader.charger();
}
Object::~Object()
{
    // Destruction du VBO
 
    glDeleteBuffers(1, &m_vboID);
 
 
    // Destruction du VAO
 
    glDeleteVertexArrays(1, &m_vaoID);
}
 
 
// Méthodes
 
void Object::charger()
{
    // Destruction d'un éventuel ancien VBO
 
    if(glIsBuffer(m_vboID) == GL_TRUE)
        glDeleteBuffers(1, &m_vboID);
 
 
    // Génération de l'ID
 
    glGenBuffers(1, &m_vboID);
 
 
    // Verrouillage du VBO
 
    glBindBuffer(GL_ARRAY_BUFFER, m_vboID);
 
 
        // Allocation de la mémoire vidéo
        glBufferData(GL_ARRAY_BUFFER, m_vertices.size()*sizeof(glm::vec3)+m_uvs.size()*sizeof(glm::vec2), 0, GL_STREAM_DRAW);
 
 
        // Transfert des données
 
        glBufferSubData(GL_ARRAY_BUFFER, 0, m_vertices.size()*sizeof(glm::vec3), &m_vertices[0]);
        glBufferSubData(GL_ARRAY_BUFFER, m_vertices.size()*sizeof(glm::vec3), m_uvs.size()*sizeof(glm::vec2), &m_uvs[0]);
 
    // Déverrouillage de l'objet
 
    glBindBuffer(GL_ARRAY_BUFFER, 0);
 
 
    // Destruction d'un éventuel ancien VAO
 
    if(glIsVertexArray(m_vaoID) == GL_TRUE)
        glDeleteVertexArrays(1, &m_vaoID);
 
 
    // Génération de l'ID du VAO
 
    glGenVertexArrays(1, &m_vaoID);
 
 
    // Verrouillage du VAO
 
    glBindVertexArray(m_vaoID);
 
 
        // Verrouillage du VBO
 
        glBindBuffer(GL_ARRAY_BUFFER, m_vboID);
 
 
            // Accès aux vertices dans la mémoire vidéo
 
            glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));
            glEnableVertexAttribArray(0);
 
 
            // Accès aux coordonnées de texture dans la mémoire vidéo
 
            glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(m_vertices.size()*sizeof(glm::vec3)));
            glEnableVertexAttribArray(2);
 
 
        // Déverrouillage du VBO
 
        glBindBuffer(GL_ARRAY_BUFFER, 0);
 
 
    // Déverrouillage du VAO
 
    glBindVertexArray(0);
}
 
 
void Object::afficher(glm::mat4 &projection, glm::mat4 &modelview)
{
    // Activation du shader
    glUseProgram(m_shader.getProgramID());
 
 
        // Verrouillage du VAO
 
        glBindVertexArray(m_vaoID);
 
 
            // Envoi des matrices
 
            m_shader.envoyerMat4("modelviewProjection", projection * modelview);
 
 
            // Verrouillage de la texture
 
            glBindTexture(GL_TEXTURE_2D, m_texture.getID());
 
 
            // Rendu
 
            glDrawArrays(GL_TRIANGLES, 0, m_vertices.size());
 
 
            // Déverrouillage de la texture
 
            glBindTexture(GL_TEXTURE_2D, 0);
 
 
        // Déverrouillage du VAO
 
        glBindVertexArray(0);
 
 
    // Désactivation du shader
 
    glUseProgram(0);
}
merci de votre aide

EDIT : je viens de me rendre compte qu'enfaite c'est la texture qui est noire (et je la voyais pas sur fond noir)

EDIT 2 : glGetError() detecte une erreur (1280) sur cette ligne GLenum initialisationGLEW( glewInit() );