2011-09-22 6 views
5

¿Es posible emitir un nuevo tipo de primitiva desde el sombreador de geometría distinto de la entrada? Me gustaría ingresar un punto y renderizar un triángulo. El punto se usaría solo como centro para este triángulo. Si no, ¿hay otra opción para ingresar simplemente apuntar y representar otra pieza de geometría definida por ese punto?usando el sombreador de geometría para crear nuevos tipos de primitivas

Con la ayuda de la respuesta en este caso es la geometría de sombreado haciendo justo lo que pedí (si alguien alguna vez es necesario):

#version 120 
#extension GL_EXT_geometry_shader4 : enable 

layout(points) in; 
layout(triangle_strip) out; 

void main() 
{ 
    gl_Position = gl_in[0].gl_Position; 
    EmitVertex(); 
    gl_Position = gl_in[0].gl_Position+vec4(1,0,0,0); 
    EmitVertex(); 
    gl_Position = gl_in[0].gl_Position+vec4(0, 1, 0, 0); 
    EmitVertex(); 
    EndPrimitive(); 
} 

Respuesta

4

Sí, esto es perfectamente posible, eso es lo que el shader de geometría está ahí para. Simplemente especifique el tipo de primitiva de entrada como punto y el tipo de primitiva de salida como triángulo (o mejor triángulo, sin importar si es solo un triángulo) usando glProgramParameteri en la aplicación o usando la sintaxis más moderna layout directamente en el sombreador.

+0

Tenga en cuenta que realmente no puede elegir la sintaxis. O más bien, la sintaxis que elija se basa en si está utilizando la versión de extensión de sombreadores de geometría o la funcionalidad principal. No intentes mezclar los dos. –

+0

@Nicol De hecho, aún no he trabajado con sombreadores de geometría. Gracias por la aclaración. –

Cuestiones relacionadas