2015-11-20 70 views
1

我想弄清楚如何使用片段着色器繪製居中的圓。我不太明白如何實現這一點。這是我到目前爲止,但結果是一個白色的屏幕。畫中心圓

我希望能夠繪製出任意大小,並且能夠按照我喜歡的方式更改偏移量(移動圓圈)。

void main() 
{ 
    float radius  = 10.0; 

    float viewWidth  = 340.0; 
    float viewHeight = 500.0; 

    float offsetX  = viewWidth/2.0; 
    float offsetY  = viewHeight/2.0; 

    float factorX  = viewWidth/(360.0/6.3); 
    float factorY  = viewHeight/(360.0/6.3); 

    float angleX  = gl_FragCoord.x/factorX; 
    float angleY  = gl_FragCoord.y/factorY; 

    float x    = offsetX + (sin(angleX) * radius); 
    float y    = offsetY + (cos(angleY) * radius); 
    float c    = x + y; 

    gl_FragColor = vec4(c, c, c, 1.0); 
}   

回答

1

請記住,這個程序分別爲每個單獨的片段運行。每個人只需要決定是否在圈內或圈外。這裏不需要使用sincos,只需測量距離視口中心的距離,看片段是否在圓圈中。

這裏有一個盤,這是更簡單:http://glslsandbox.com/e#28997.0

uniform vec2 resolution; 

void main(void) { 

    vec2 position = (gl_FragCoord.xy/resolution.xy) - 0.5; 
    position.x *= resolution.x/resolution.y; 

    float circle = 1.0 - smoothstep(0.2, 0.21, length(position)); 

    gl_FragColor = vec4(vec3(circle), 1.0); 

} 

而且這裏有一個圓圈,由通過調整盤片一點:http://glslsandbox.com/e#28997.1

uniform vec2 resolution; 

void main(void) { 

    vec2 position = (gl_FragCoord.xy/resolution.xy) - 0.5; 
    position.x *= resolution.x/resolution.y; 

    float circle = 1.0 - smoothstep(0.003, 0.005, abs(length(position) - 0.2)); 

    gl_FragColor = vec4(vec3(circle), 1.0); 

}