glsl - 在片段着色器中绘制矩形

标签 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 ) && ( abs(position.y) < 0.5 ) )
        gl_FragColor = vec4( 0.0, 0.0, 1.0, 1.0 );
}

当我测试像素是否在矩形中时,我必须执行 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);
}

Here's a working version

关于glsl - 在片段着色器中绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23155029/

相关文章:

Python 模块 'shader' : from shader import ShaderProgram, 着色器代码

ios - 是否有常见 OpenGL 着色器的常用来源?

c++ - OpenGL错误编译着色器

OpenGL - 在不使用 NV_gpu_shader5 的情况下访问 glMultiDrawElementsIndirect 内的无绑定(bind)纹理

javascript - 使用 webgl 在鼠标移动上创建一个连续动画回到原始状态的涂抹/液化效果

3d - 奇怪的 FPS 下降

javascript - 使用光线追踪将 3D 场景转换为 2D 图像(webgl、 Three.js)

glsl - webgl 着色器调试/性能/成本

c++ - 用于 GLSL 图像处理的小型 C/C++ 库?

javascript - 如何在 WebGL 中创建一个世界中的多个场景?