4

我正在尝试在 GLSL 中的片段着色器上实现参数曲线绘图仪。

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

您可以在此处找到(工作和注释的)代码。

以下是我的问题:

  • 我想用一条线来绘制它。据我了解,我看到了两种不同的方法:

    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. 通过在参数的每个连续位置之间绘制线段

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

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

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

4

0 回答 0