all of the changes
This commit is contained in:
20
include/FluidSim/Desktop/OrbitCamera.hpp
Normal file
20
include/FluidSim/Desktop/OrbitCamera.hpp
Normal file
@@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
#include "FluidSim/AudioProcessing.hpp"
|
||||
#include <SFML/System/Vector2.hpp>
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
namespace fluidsim::port::desktop {
|
||||
struct OrbitCamera {
|
||||
Vec3 target{.12f,.25f,0};
|
||||
float yaw{-28},pitch{24},distance{2.2f};
|
||||
void reset(float aspect) {target={.12f,.25f,0};yaw=-28;pitch=24;distance=std::max(.65f,1.6f/aspect)/.414214f;}
|
||||
void orbit(sf::Vector2i delta) {yaw+=delta.x*.35f;pitch=std::clamp(pitch+delta.y*.3f,-75.f,80.f);}
|
||||
void pan(sf::Vector2i delta,float height) {
|
||||
const float y=yaw*.017453293f,p=pitch*.017453293f,k=distance*.828427f/std::max(height,1.f);
|
||||
target.x+=k*(-delta.x*std::cos(y)+delta.y*std::sin(p)*std::sin(y));
|
||||
target.y+=k*delta.y*std::cos(p);
|
||||
target.z+=k*(-delta.x*std::sin(y)-delta.y*std::sin(p)*std::cos(y));
|
||||
}
|
||||
void zoom(float delta) {distance=std::clamp(distance*std::exp(-delta*.12f),.35f,12.f);}
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user