#pragma once #include "effects/video_effect.hpp" namespace effector { // The feedback effect in motion: the picture nested inside itself, each copy // smaller, turned and drifted further than the one around it, and the whole // stack flying inwards (or outwards) without end. // // A copy sits at a depth, and its size, turn and drift follow from that depth // alone. Every frame moves each copy on by part of one step, so after a whole // cycle each copy lies exactly where its neighbour started: a new one fades // in at the far end while the nearest fades out into the picture itself, and // the clip loops without a jump. class TunnelEffect : public VideoEffect { public: std::string name() const override { return "tunnel"; } std::string title() const override { return "Echo tunnel"; } std::string description() const override { return "Nests the picture inside itself, as Feedback does, and flies through the echoes " "without end."; } const std::vector& params() const override; protected: Image animate(Image input, const ParamValues& values, const Moment& at) const override; }; } // namespace effector