31 lines
1.1 KiB
C++
31 lines
1.1 KiB
C++
#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<ParamSpec>& params() const override;
|
|
|
|
protected:
|
|
Image animate(Image input, const ParamValues& values, const Moment& at) const override;
|
|
};
|
|
|
|
} // namespace effector
|