1
0
Fork 0
fgdata/Shaders/surface-light-ALS.vert

36 lines
880 B
GLSL

// -*-C++-*-
// Shader that uses OpenGL state values to do per-pixel lighting
uniform float size;
uniform float max_size;
uniform bool is_directional;
varying vec3 relPos;
varying vec2 rawPos;
varying float pixelSize;
bool light_directional = true;
void main()
{
gl_FrontColor= gl_Color;
gl_Position = ftransform();
vec4 ep = gl_ModelViewMatrixInverse * vec4(0.0,0.0,0.0,1.0);
relPos = gl_Vertex.xyz - ep.xyz;
rawPos = gl_Vertex.xy;
float dist = length(relPos);
float angular_fade = 1.0;
//if (length(gl_Normal)> 0.0)
if (is_directional)
{
angular_fade = 2.0 * max(0.0,-dot(normalize(gl_Normal), normalize(relPos)));
}
float lightScale = size * size * size * size * size/ 500.0 *angular_fade;
pixelSize = min(size * size/25.0,lightScale/dist) ;
pixelSize = min(pixelSize, max_size);
gl_PointSize = 2.0 * pixelSize;
}