293 {
294 auto *e = ctx.mEngine.get();
295 e->get_ready();
296
297
298
299
300
301
302
303
304
305
306 static constexpr float perlin_period = 2560.0f;
307
308 e->timings.master_speed = 0.01;
309 e->timings.ratio[0] = 0.1;
310 e->timings.ratio[1] = 0.13;
311 e->timings.ratio[2] = 0.16;
312 e->timings.offset[1] = 10;
313 e->timings.offset[2] = 20;
314 e->timings.offset[3] = 30;
315 e->calculate_oscillators(e->timings);
316
317 for (
int x = 0;
x < e->num_x;
x++) {
318 for (
int y = 0;
y < e->num_y;
y++) {
319 e->animation.angle =
320 3 * e->polar_theta[
x][
y] + e->move.radial[0] -
321 e->distance[
x][
y] / 3;
322 e->animation.dist = e->distance[
x][
y];
323 e->animation.scale_z = 0.1;
324 e->animation.scale_y = 0.1;
325 e->animation.scale_x = 0.1;
326 e->animation.offset_x =
fl::fmodf(e->move.linear[0], perlin_period);
327 e->animation.offset_y = 0;
328 e->animation.offset_z = 0;
329 e->animation.z = 0;
330 float show1 = e->render_value(e->animation);
331
332 e->animation.angle =
333 3 * e->polar_theta[
x][
y] + e->move.radial[1] -
334 e->distance[
x][
y] / 3;
335 e->animation.dist = e->distance[
x][
y];
336 e->animation.offset_x =
fl::fmodf(e->move.linear[1], perlin_period);
337 float show2 = e->render_value(e->animation);
338
339 e->animation.angle =
340 3 * e->polar_theta[
x][
y] + e->move.radial[2] -
341 e->distance[
x][
y] / 3;
342 e->animation.dist = e->distance[
x][
y];
343 e->animation.offset_x =
fl::fmodf(e->move.linear[2], perlin_period);
344 float show3 = e->render_value(e->animation);
345
346 float radius = e->radial_filter_radius;
347 float radial_filter = (radius - e->distance[
x][
y]) / radius;
348
349 e->pixel.red = 3 * show1 * radial_filter;
350 e->pixel.green = show2 * radial_filter / 2;
351 e->pixel.blue = show3 * radial_filter / 4;
352
353 e->pixel = e->rgb_sanity_check(e->pixel);
354 e->setPixelColorInternal(
x,
y, e->pixel);
355 }
356 }
357}
float fmodf(float x, float y) FL_NO_EXCEPT