RIght now, the vertex and fragment shader are working, they make the point sprites look like sphere but in 2D (the texture of the sphere is always facing you). When i'm trying to use the geometry shader below, nothing is rendered. HELP!!! lol!
Here the code :
// vertex shader uniform float pointRadius; // point size in world spaceuniform float pointScale; // scale to calculate size in pixelsuniform vec4 eyePos;void main(){ vec4 wpos = vec4(gl_Vertex.xyz, 1.0); gl_Position = gl_ModelViewProjectionMatrix * wpos; // calculate window-space point size vec4 eyeSpacePos = gl_ModelViewMatrix * wpos; float dist = length(eyeSpacePos.xyz); gl_PointSize = pointRadius * (pointScale / dist); gl_TexCoord[0] = gl_MultiTexCoord0; // sprite texcoord gl_TexCoord[1] = eyeSpacePos; gl_FrontColor = gl_Color;}
// pixel shader for rendering points as shaded spheres uniform float pointRadius;uniform vec3 lightDir = vec3(0.577, 0.577, 0.577);void main(){ // calculate eye-space sphere normal from texture coordinates vec3 N; N.xy = gl_TexCoord[0].xy*vec2(2.0, -2.0) + vec2(-1.0, 1.0); float r2 = dot(N.xy, N.xy); if (r2 > 1.0) discard; // kill pixels outside circle N.z = sqrt(1.0-r2); // calculate depth vec4 eyeSpacePos = vec4(gl_TexCoord[1].xyz + N*pointRadius, 1.0); // position of this pixel on sphere in eye space vec4 clipSpacePos = gl_ProjectionMatrix * eyeSpacePos; gl_FragDepth = (clipSpacePos.z / clipSpacePos.w)*0.5+0.5; float diffuse = max(0.0, dot(N, lightDir)); gl_FragColor = diffuse*gl_Color;}
// geometry shader//#version 120 //#extension GL_EXT_geometry_shader4 : enableconst float radius = 0.5;varying out vec2 coord; void main() { for (int i = 0 ; i < gl_VerticesIn ; ++i ) { gl_FrontColor = gl_FrontColorIn; gl_Position = gl_PositionIn; EmitVertex ( ); } gl_FrontColor = gl_FrontColorIn[0]; coord = vec2( -1,-1 ); gl_Position = (gl_PositionIn[0] + gl_ProjectionMatrix * vec4(-radius,-radius,0,0) ); EmitVertex(); coord = vec2( -1,1 ); gl_Position = (gl_PositionIn[0] + gl_ProjectionMatrix * vec4(-radius,radius, 0,0) ); EmitVertex(); coord = vec2( 1,-1 ); gl_Position = (gl_PositionIn[0] + gl_ProjectionMatrix * vec4( radius,-radius, 0,0) ); EmitVertex(); coord = vec2( 1,1 ); gl_Position = (gl_PositionIn[0] + gl_ProjectionMatrix * vec4( radius,radius, 0,0) ); EmitVertex(); EndPrimitive();}