Bonsoir, cela fait des heures que j'essaie de modéliser un rectangle dans mon geometry shader avec la sortie triangle_strip. Quoi que je fasse je n'obtiens que des triangles orientés différemment ou bien rien du tout, il est pourtant précisé ici que les sommets étaient pris par paquets de 3 de sorte à ce que 4 sommets suffisent à former deux triangles mais dans mon cas on dirait que le 1er sommet est toujours ignoré.
Je dessine mes vertices de cette manière :
Si je remplace "triangle_strip" par "line_strip" j'obtiens ceci :
Voici mes shaders :
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
20 #version 330 core layout (location=0) in vec3 vertex; uniform mat4 projection; uniform mat4 modele; uniform mat4 vue; out VS_OUT { vec4 pos; } vs_out; void main(void) { vec4 vertex2=vec4(vertex,1.0); //gl_Position=projection*vue*modele*vertex2; vs_out.pos=vertex2; }
Geometry 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
22
23
24
25
26
27
28
29
30
31
32 #version 330 core layout(points) in; layout(triangle_strip, max_vertices = 4) out; uniform mat4 projection; uniform mat4 modele; uniform mat4 vue; in VS_OUT { vec4 pos; } gs_in[]; void main() { const float largeur=2.0; const float hauteur=10.0; gl_Position = projection*vue*modele*(gs_in[0].pos + vec4(0.0,largeur/2,0.0,0.0)); EmitVertex(); gl_Position = projection*vue*modele*(gs_in[0].pos + vec4(0.0,largeur/2,hauteur,0.0)); EmitVertex(); gl_Position = projection*vue*modele*(gs_in[0].pos + vec4(0.0,-largeur/2,0.0,0.0)); EmitVertex(); gl_Position = projection*vue*modele*(gs_in[0].pos + vec4(0.0,-largeur/2,hauteur,0.0)); EmitVertex(); EndPrimitive(); }
Fragment shader :
Avec ce geometry shader rien n'est dessiné (Pour une raison mystérieuse), avec celui-ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #version 330 core out vec4 FragColor; void main(void) { FragColor=vec4(1.0,0.0,0.0,1.0); }
J'obtiens des triangles posés sur la pointe. J'ai essayé d'autres configurations mais je n'obtiens JAMAIS de rectangles.
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 #version 330 core layout(points) in; layout(triangle_strip, max_vertices = 6) out; uniform mat4 projection; uniform mat4 modele; uniform mat4 vue; in VS_OUT { vec4 pos; } gs_in[]; void main() { const float largeur=2.0; const float hauteur=10.0; gl_Position = projection*vue*modele*(gs_in[0].pos + vec4(0.0,largeur/2,0.0,0.0)); EmitVertex(); gl_Position = projection*vue*modele*(gs_in[0].pos + vec4(0.0,largeur/2,hauteur,0.0)); EmitVertex(); gl_Position = projection*vue*modele*(gs_in[0].pos + vec4(0.0,-largeur/2,0.0,0.0)); EmitVertex(); /////////////////////////////////////////////////////////////////////////////////////////////// gl_Position = projection*vue*modele*(gs_in[0].pos + vec4(0.0,-largeur/2,0.0,0.0)); EmitVertex(); gl_Position = projection*vue*modele*(gs_in[0].pos + vec4(0.0,largeur/2,hauteur,0.0)); EmitVertex(); gl_Position = projection*vue*modele*(gs_in[0].pos + vec4(0.0,-largeur/2,hauteur,0.0)); EmitVertex(); EndPrimitive(); }
Pourriez-vous m'aider svp car là je sèche complètement ...
Partager