2014-04-18 63 views
1

我想知道是否有可能在不使用任何if的情況下在片段着色器中繪製矩形。我試過這個:在片段着色器中繪製矩形

void main(void) 
{ 

    vec2 resolution = vec2(300.0, 300.0); 
    vec2 center = resolution/2.0; 
    vec2 position = (gl_FragCoord.xy - center)/resolution; 

    if ((abs(position.x) < 0.5) && (abs(position.y) < 0.5)) 
     gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0); 
} 

而當我測試像素是否在矩形我必須執行if測試。 我認爲有一個解決方案沒有如果,如果你能幫助我?

回答

1

我不確定你想要做什麼,但這裏有一個想法?

precision mediump float; 

uniform float time; 
uniform vec2 mouse; 
uniform vec2 resolution; 

void main(void) { 

    vec2 position = (gl_FragCoord.xy/resolution.xy) + mouse/4.0; 

        // x1 y1 x2 y2 
    vec4 rect = vec4(0.2, 0.3, 0.4, 0.5); 
    vec2 hv = step(rect.xy, position) * step(position, rect.zw); 
    float onOff = hv.x * hv.y; 

    gl_FragColor = mix(vec4(0,0,0,0), vec4(1,0,0,0), onOff); 
} 

Here's a working version

+0

謝謝您的回答。技術使用混合是相當不錯的。但我想知道一個二次型forme的解決方案:ax^2 +^2 + 2cxy然後混合()與距離。我不知道這是否可能?我的想法是對於橢圓,圓形,圓形矩形和矩形具有相同的方程,並且僅調整二次形式的權重。我希望矩形可以用二次函數表示嗎? – user3511595