Ja, es ist möglich! Markieren Sie dieses GLSL-Skript, das mehrere verschiedene Bögen zieht:
#define between(v,x1,x2) (v>= x1 && v<=x2)
#define pi 3.141592653589793238462643383279
uniform sampler2D tex;
void main()
{
vec2 pnt = vec2(0.5,0.5);
float dr = 0.005;
float fr = 0.15;
float r1 = fr;
float r2 = 1.5*fr;
float r3 = 2.0*fr;
float r4 = 2.5*fr;
float r5 = 3.0*fr;
float rp = distance(pnt,gl_TexCoord[0].xy);
vec4 col1 = vec4(0.4,0.1,0.,1.);
vec4 col2 = vec4(1.,1.,1.,1.);
float angle = atan(gl_TexCoord[0].y,gl_TexCoord[0].x);
vec4 rezcol;
rezcol = (between(rp,r1-dr,r1+dr) && between(angle,-pi,pi))? col1:col2;
rezcol = (between(rp,r2-dr,r2+dr) && between(angle,-pi,pi/3.1) && rezcol==col2)? col1:rezcol;
rezcol = (between(rp,r3-dr,r3+dr) && between(angle,-pi,pi/4.6) && rezcol==col2)? col1:rezcol;
rezcol = (between(rp,r4-dr,r4+dr) && between(angle,-pi,pi/8.8) && rezcol==col2)? col1:rezcol;
rezcol = (between(rp,r5-dr,r5+dr) && between(angle,-pi,pi/22.8) && rezcol==col2)? col1:rezcol;
gl_FragColor = rezcol;
}
die in einem solchen Bild ergibt:
Nicht die eleganteste Ansatz von allen, ich würde sagen,) Sie einführen ein Zweig (:) pro Kreis, was sicherlich vermieden werden kann. Auch könnte mit etwas Glättung erweitert werden. (Noch, +1) – Kos
Oyoyoy. Werfen Sie einen sanften Schritt, um Antialiasing zu ermöglichen. Auch sollten Ihre Kreise mit einer Tangente abgeschnitten werden, sie sollten mit einer Linie abgeschnitten werden, die den Kreismittelpunkt kreuzt (die Enden der Kreise sollten Winkel von 90 Grad haben, anders als in Ihrem Fall, besonders die obersten). –