Я пытаюсь реализовать параметрический плоттер кривых на фрагментном шейдере в GLSL.
Мне удалось сделать простейшую, повторяя параметр и рисуя круг для каждой вычисленной позиции.
Вы можете найти (рабочий и прокомментированный) код здесь.
Вот мои вопросы:
Я хотел бы построить его с помощью линии. Из того, что я понял, я вижу два разных способа сделать это:
вычисляя расстояние между каждым пикселем и вычисленной позицией внутри цикла, накапливая вычисленное значение в переменной с плавающей запятой, а затем рисуя кривую с помощью ступенчатой функции.
Я попытался сделать это, и кажется, что я вычисляю расстояние только для одной позиции 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); }
Нарисовав сегмент линии между каждыми последовательными позициями параметра
Я нашел эту реализацию, которая, кажется, делает то, чего я пытаюсь достичь, но я не вполне понимаю, почему они используют предыдущую позицию параметра.
Есть ли способ сделать такую функцию без цикла for, управляющего параметром?
Последняя точность: я подаю в суд только на фрагментный шейдер, потому что моя цель — загрузить его в программное обеспечение виджеинга, которое управляет фрагментными шейдерами.