GLSL参数曲线绘图仪

时间:2017-04-05 15:51:02

标签: fragment glsl curve parametric-equations

虽然我经常浏览这个网站,但我不经常发帖,我希望我按照规则做了所有事情,而且我的问题也不是太模糊。

我正在尝试在GLSL中的片段着色器上实现参数曲线绘图仪。 (同样,我只是从着色器编程开始,所以它可能是一个非常棒的问题)

我设法通过迭代参数并为每个计算位置画一个圆来制作一个基本的。

您可以在此处找到(工作和评论)代码:https://www.shadertoy.com/view/4djczm

以下是我的问题:

  • 我想用一条线来画它。根据我的理解,我看到了两种不同的方式:

1)通过计算每个像素与计算的距离 循环内的位置,在浮点数中累积计算值 变量,然后使用步进函数绘制曲线。 我尝试这样做,似乎我只计算一个t位置的距离:

#define PI 3.14

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 uv = -1. + 2.*fragCoord.xy / iResolution.xy;
    uv.x *= iResolution.x/iResolution.y;
    vec3 color = vec3(0.);
    vec2 pos;
    float dist;

    for(float t=-2.; t<2.02; t+=.02){

        pos.x = sin(4.*t+(iGlobalTime));
        pos.y = cos(6.*t);

        dist += 1.-sqrt(pow((uv.x-pos.x),2.)+pow((uv.y-pos.y),2.));

        color += vec3(dist);


    }//for

    fragColor = mix(vec4(0.0), vec4(1.0), dist);

}

2)通过在参数的每个连续位置之间绘制线段

我发现这个实现似乎正在实现我想要实现的目标,但我不太明白为什么他们使用参数的先前位置。

https://www.shadertoy.com/view/XdSGzh

  • 有没有办法在没有for循环管理参数的情况下执行这样的功能?

最后的精度:我只是起诉片段着色器,因为我的目标是将其上传到管理片段着色器的VJing软件上

祝你有个美好的一天!

0 个答案:

没有答案