Bonsoir, je me retrouve confronté à un problème d'index de location d'attribut (de vertex)
Je suis encore sous OpenGL 2.1 mais je prévoir de migrer progressivement vers OpenGL 3.0 et je m'habitue donc aux nouvelles conventions
là j'ai décidé de retirer toute référence "en dur" aux attributs de vertex position, normal, etc...
je teste sur un cube avec juste les positions de vertex
je donne à l'attribut de position l'index 10;
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 #define BUFFER_OFFSET(a) ((char*)NULL + (a)) GLuint positionsAttrib = 10; glBindAttribLocation (program, positionsAttrib, "pos"); glLinkProgram(program); glEnableVertexAttribArray(positionsAttrib); glBindBuffer(GL_ARRAY_BUFFER, VBObuffersId[0]); glVertexAttribPointer(positionsAttrib,3, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, VBObuffersId[1]); glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_INT, 0); glDisableVertexAttribArray(positionsAttrib); glBindBuffer(GL_ARRAY_BUFFER,0);
code du 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
20
21 VERT uniform mat4 ModelViewMatrix; uniform mat4 ProjectionMatrix; attribute vec3 pos; void main() { gl_Position = ProjectionMatrix*ModelViewMatrix*vec4(pos, 1.0f); } FRAG void main() { gl_FragColor = vec4(0.4,0.4,0.8,1.0); }
alors c'est bien simple lorsque je teste avec l'index 10 pas d'erreur mais rien ne s'affiche
mais lorsque je remplace cet index par 0(donc l'index "harcodé" de l'attribut de position) aucun problème
j'y avais deja eu droit quand j'avais voulu ajouter des attributs de tangentes et binormales (index 8 et 9) mais le problème venait que j'avais oublier de linker de nouveau le program après le glBindAttribLocation et j'utilisais encore glVertexPointer, glNormalPointer, etc
merci![]()
Partager