2023-07-21 16:42:29 +00:00
|
|
|
#include "PerspectiveEffect.h"
|
|
|
|
#include <numbers>
|
2023-09-09 10:22:14 +00:00
|
|
|
#include "../MathUtil.h"
|
2024-02-11 22:06:35 +00:00
|
|
|
#include "../obj/Camera.h"
|
2023-07-21 16:42:29 +00:00
|
|
|
|
2024-02-12 20:34:00 +00:00
|
|
|
PerspectiveEffect::PerspectiveEffect() {}
|
2023-07-21 16:42:29 +00:00
|
|
|
|
2024-01-07 19:48:02 +00:00
|
|
|
PerspectiveEffect::~PerspectiveEffect() {}
|
2023-12-20 23:30:20 +00:00
|
|
|
|
2024-01-07 16:17:20 +00:00
|
|
|
Point PerspectiveEffect::apply(int index, Point input, const std::vector<double>& values, double sampleRate) {
|
2023-07-21 16:42:29 +00:00
|
|
|
auto effectScale = values[0];
|
2024-01-17 01:26:07 +00:00
|
|
|
auto focalLength = juce::jmax(values[1], 0.001);
|
2024-01-21 22:22:03 +00:00
|
|
|
|
2024-02-12 22:33:06 +00:00
|
|
|
Vec3 origin = Vec3(0, 0, -focalLength);
|
2024-02-11 22:06:35 +00:00
|
|
|
camera.setPosition(origin);
|
|
|
|
camera.setFocalLength(focalLength);
|
2024-02-12 20:34:00 +00:00
|
|
|
Vec3 vec = Vec3(input.x, input.y, input.z);
|
2024-01-21 22:22:03 +00:00
|
|
|
|
2024-02-11 22:06:35 +00:00
|
|
|
Vec3 projected = camera.project(vec);
|
2024-02-11 18:56:46 +00:00
|
|
|
|
2024-01-07 16:17:20 +00:00
|
|
|
return Point(
|
2024-02-11 22:06:35 +00:00
|
|
|
(1 - effectScale) * input.x + effectScale * projected.x,
|
|
|
|
(1 - effectScale) * input.y + effectScale * projected.y,
|
2024-01-07 19:48:02 +00:00
|
|
|
0
|
2023-07-21 16:42:29 +00:00
|
|
|
);
|
|
|
|
}
|