Bonjour,

J'essaie d'afficher un cube en glsl (qt 5.) et j'ai une page grise (correspondante à mon font définis), mon cube ne s'affichant donc pas... Je ne trouve pas d'exemple en glsl qt récent sur le sujet ... Pour le moment je cherche à seulement afficher un cube sans texture, et par la suite avec texture (j'ai essayé directement en texture sans succès, j'ai donc décidé de faire par étape).

Voici mon code pour le cube :

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
 
SkyBox::SkyBox()
{
   vertices[0] = -1.0; vertices[1] = -1.0; vertices[2] =  1.;  // v0
       vertices[3] = 1.0; vertices[4] = -1.0; vertices[5] =  1.0; // v1
       vertices[6] = 1.0; vertices[7] =  1.0; vertices[8] =  1.; // v3
       vertices[9] = -1.0; vertices[10] =  1.0; vertices[11] =  1.0;  // v2
       vertices[12] = -1.0; vertices[13] = -1.0; vertices[14] = -1.0; // v9
       vertices[15] = 1.0; vertices[16] = -1.0; vertices[17] = -1.0; // v5
       vertices[18] = 1.0; vertices[19] =  1.0; vertices[20] = -1.0; // v7
       vertices[21] = -1.0; vertices[22] =  1.0; vertices[23] = -1.0;  // v11
 
 
   GLushort indices[] = {
        0,1,2, 2,3,0,
        0,3,4, 4,5,0,
        0,5,6, 6,1,0,
        1,6,7, 7,2,1,
        7,4,3, 3,2,7,
        4,7,6, 6,5,4
    };
 
   glGenBuffers(1, &m_vbuffer);
    glBindBuffer(GL_ARRAY_BUFFER, m_vbuffer);
    glBufferData(GL_ARRAY_BUFFER, 24 * sizeof(double), vertices, GL_STREAM_DRAW);
 
   glGenBuffers(1, &m_ibuffer);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibuffer);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, 36 * sizeof(GLushort), indices, GL_STREAM_DRAW);
 
 
    glBindBuffer(GL_ARRAY_BUFFER, m_vbuffer);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibuffer);
}
 
void SkyBox::render(QOpenGLShaderProgram *program)
{
    glEnableVertexAttribArray(0);
 
    glBindBuffer(GL_ARRAY_BUFFER, m_vbuffer);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibuffer);
 
    int vertexLocation = program->attributeLocation("a_position");
    program->enableAttributeArray(vertexLocation);
    glVertexAttribPointer(vertexLocation, 3, GL_FLOAT, GL_FALSE, sizeof(double), vertices);
 
    // Draw cube geometry using indices from VBO 1
    glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_BYTE, 0);
}
et pour mes shaders :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
#version 430
uniform mat4 mvp_matrix;
 
attribute vec4 a_position;
 
void main()
{
    gl_Position = mvp_matrix * a_position;
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
#version 430
void main()
{
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
ma matrice mvp est bonne, pour l'utiliser dans d'autre programme. et je suis bien placé au centre de la fenêtre grâce à

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
glViewport(0, 0, this->size().width(), this->size().height());
Des idées sur le problème ? si non un exemple sur le sujet peut être ?

Merci par avance !