Glsl 在片段着色器中绘制矩形

Glsl 在片段着色器中绘制矩形,glsl,webgl,shader,shapes,Glsl,Webgl,Shader,Shapes,我想知道是否有可能在不使用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 ) &&

我想知道是否有可能在不使用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 );
}
void主管道(void)
{ 
vec2分辨率=vec2(300.0,300.0);
vec2中心=分辨率/2.0;
vec2位置=(gl_FragCoord.xy-中心)/分辨率;
如果((abs(位置x)<0.5)和&(abs(位置y)<0.5))
gl_FragColor=vec4(0.0,0.0,1.0,1.0);
}
当我测试像素是否在矩形中时,我必须执行if测试。
我认为有一个解决方案是没有if,如果你能帮我的话?

我不知道你想做什么,但这里有一个想法

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);
}

谢谢你的回答。使用mix的技术非常好。但是我想知道一个二次型的解:ax^2+乘以^2+2cxy,然后是带距离的mix()。我不知道这是否可能?我的想法是对椭圆、圆、圆矩形和矩形有相同的方程,只需调整二次型的权重即可。我希望矩形可以用二次型表示?