GLSL Параметрический Кривый Плоттер
Несмотря на то, что я регулярно просматриваю этот сайт, я не часто задаю вопросы, надеюсь, я все сделал по правилам, и мой вопрос не слишком расплывчатый.
Я пытаюсь реализовать параметрический построитель кривых на фрагментный шейдер в GLSL. (Опять же, я только начинаю с программирования шейдеров, так что это может быть действительно нубский вопрос)
Мне удалось создать элементарный элемент путем итерации параметра и рисования круга для каждой вычисленной позиции.
Вы можете найти (рабочий и закомментированный) код здесь: https://www.shadertoy.com/view/4djczm
Вот мои вопросы:
- Я хотел бы нарисовать это с линией. Из того, что я понял, я вижу два разных способа сделать это:
1) вычисляя расстояние между каждым пикселем и вычисленной позицией внутри цикла, накапливают вычисленное значение в переменной с плавающей запятой и затем рисуют кривую, используя пошаговую функцию. Я попытался сделать это, и кажется, что я вычисляю только расстояние для одной позиции:
#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, которое управляет фрагментными шейдерами
Хорошего дня!