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 :

Nom : Rectangle geometry shader.jpg
Affichages : 299
Taille : 95,2 Ko

Si je remplace "triangle_strip" par "line_strip" j'obtiens ceci :

Nom : Ligne geometry shader.jpg
Affichages : 293
Taille : 87,7 Ko

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 :

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);
}
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
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();
}
J'obtiens des triangles posés sur la pointe. J'ai essayé d'autres configurations mais je n'obtiens JAMAIS de rectangles.

Pourriez-vous m'aider svp car là je sèche complètement ...