Professional Documents
Culture Documents
Bexier
Bexier
layout(lines) in;
layout(line_strip, max_vertices = 256) out;
in int instance[2];
vec3 bezier(float t)
{
return control_p1 * pow((1 - t), 3) + control_p2 * 3 * t * pow((1 - t), 2) +
control_p3 * 3 * pow(t, 2) * (1 - t) + control_p4 * pow(t, 3);
}
void main()
{
if (t > 0.5) {
delta = translateZ(delta, 0.05);
delta2 = translateZ(delta2, 0.05);
delta3 = translateZ(delta3, 0.05);
delta4 = translateZ(delta4, 0.05);
}
if (t < 0.5) {
delta = translateX(delta, 0.0005);
delta2 = translateX(delta2, 0.0005);
delta3 = translateX(delta3, 0.0005);
delta4 = translateX(delta4, 0.0005);
}
if (t < 0.2) {
delta = translateZ(delta, -0.05);
delta2 = translateZ(delta2, -0.05);
delta3 = translateZ(delta3, -0.05);
delta4 = translateZ(delta4, -0.05);
}
vec3 p1 = bezier(t);
vec3 p2 = bezier(t + 1.0 / no_of_generated_points);
vec3 p3 = bezier(t);
vec3 p4 = bezier(t + 1.0 / no_of_generated_points);