हाँ यह संभव है! इस GLSL स्क्रिप्ट जो कई अलग अलग आर्क्स ड्रॉ की जाँच करें:
#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;
}
जो इस प्रकार की छवि में जो परिणाम:
स्रोत
2010-12-01 16:28:38
नहीं सभी के सबसे सुरुचिपूर्ण दृष्टिकोण, मैं कहता हूँ चाहते हैं;) आप एक शाखा परिचय (? :) प्रति सर्कल, जिसे निश्चित रूप से टाला जा सकता है। इसके अलावा, कुछ चिकनाई के साथ बढ़ाया जा सकता है। (फिर भी, +1) – Kos
Oyoyoy। एंटीअलाइजिंग प्रदान करने के लिए कुछ चिकनी परत में फेंको। इसके अलावा, आपकी मंडलियां एक स्पर्शरेखा के साथ काटती हैं, उन्हें एक रेखा से काटा जाना चाहिए जो सर्कल सेंटर को पार कर लेता है (सर्कल के सिरों में 90 डिग्री कोण होना चाहिए, आपके मामले में, विशेष रूप से सबसे ऊपर)। –