2 pièce(s) jointe(s)
Geometry shader, impossible de dessiner un rectangle
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 :
Pièce jointe 606332
Si je remplace "triangle_strip" par "line_strip" j'obtiens ceci :
Pièce jointe 606333
Voici mes shaders :
Vertex shader :
Code:
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:
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:
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:
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 ...