2014-04-18 4 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); 
} 

그리고 픽셀이 사각형 인 경우 내가 테스트 할 때 내가 수행 시험의 경우해야합니다 나는 이것을 시도했다. 만약 당신이 나를 도울 수 있다면, 해결책이 없다고 생각해?

답변

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

감사합니다. 믹스를 사용하는 기술은 꽤 좋습니다. 하지만 나는 2 차 형식의 솔루션을 궁금해했다 : ax^2 + by^2 + 2cxy 그리고 나서 거리와 함께 mix(). 나는 그것이 가능한지 모른다. 내 생각은 타원, 원, 둥근 사각형 및 사각형에 대해 동일한 방정식을 사용하고 이차 형식의 가중치를 조정하는 것입니다. 직사각형이 2 차 형식으로 표현되기를 바랍니다. – user3511595