#version 330
smooth out vec4 vFragColor;
uniform vec4 vColor;
void main() {
if(dot(gl_PointCoord-0.5,gl_PointCoord-0.5)>0.25)
discard;
else
vFragColor = vColor;
}
This gives the following output
Which basically offsets the uv coordinates and then solves to see if the sqrt of distance is equal to 0.5 the radius of our point. I squre both sides to get the expression i have used. Similarly, a lot of interesting shapes could be generated as i show below.
Parametric coordinates:
We can use the parametric coordinate system (http://en.wikipedia.org/wiki/Polar_coordinate_system) to generate a lot of neat shapes of particles as I show below. For the polar coordinates, we need two things, radius and angle theta,
We get radius using
vec2 p = gl_PointCoord* 2.0 - vec2(1.0);
float r = sqrt(dot(p,p));
For theta, we use
float theta = atan(p.y,p.x);
Now I show u how to generate a lot of neat shapes based on the polar coordinate expressions on the wikipedia page linked above,
Polar rose:
if(dot(p,p) > cos(theta*5))
discard;
else
vFragColor = vColor;
This gives the following output,
Round ring:
if(dot(p,p) > r || dot(p,p) < r*0.75)
discard;
else
vFragColor = vColor;
You can change the multiplier to change the hole size.
This gives the following output,
Spiral:
if(dot(p,p)> 5.0/cos(theta-20*r))
discard;
else
vFragColor = vColor;
This gives the following output,
Rounded star:
if(dot(p,p) > 0.5*(exp(cos(theta*5)*0.75)) )
discard;
else
vFragColor = vColor;
This gives the following output,
There might be other simpler ways of generating these shapes but these are some simpler ways to generate the various point sprite shapes.
Happy OpenGL coding.
Mobeen
0 comments:
Post a Comment