17 constexpr Vector3(
float xValue,
float yValue,
float zValue) :
x(xValue),
y(yValue),
z(zValue) {}
23 [[nodiscard]]
float operator[](uint32_t axis)
const {
return axis == 0 ?
x : axis == 1 ?
y :
z; }
26 [[nodiscard]] Vector3
operator+(Vector3 left, Vector3 right);
27 [[nodiscard]] Vector3
operator-(Vector3 left, Vector3 right);
28 [[nodiscard]] Vector3
operator*(Vector3 vector,
float scale);
63 void Orbit(
float deltaXPixels,
float deltaYPixels);
64 void Pan(
float deltaXPixels,
float deltaYPixels, uint32_t viewportHeight);
65 void Zoom(int32_t wheelSteps);
66 void Focus(Vector3 target,
float distance);
92 [[nodiscard]] std::optional<CellCoordinate>
PickSliceCell(
const CameraRay& ray, uint32_t axis, uint32_t plane,
CameraBasis Basis(uint32_t width, uint32_t height) const
OrbitCameraState m_initial
static constexpr float VERTICAL_FIELD_OF_VIEW_DEGREES
void Focus(Vector3 target, float distance)
const OrbitCameraState & State() const
void Pan(float deltaXPixels, float deltaYPixels, uint32_t viewportHeight)
static constexpr float MAX_DISTANCE
static constexpr float MIN_DISTANCE
void Orbit(float deltaXPixels, float deltaYPixels)
void Zoom(int32_t wheelSteps)
OrbitCamera(const OrbitCameraState &initial={})
Vector3 operator+(Vector3 left, Vector3 right)
CellCoordinate CellOnSlice(uint32_t axis, uint32_t plane, uint32_t u, uint32_t v)
Vector3 operator-(Vector3 left, Vector3 right)
Vector3 operator*(Vector3 vector, float scale)
CameraRay RayThroughPixel(const CameraBasis &basis, float pixelX, float pixelY, uint32_t width, uint32_t height)
std::optional< CellCoordinate > PickSliceCell(const CameraRay &ray, uint32_t axis, uint32_t plane, uint32_t gridSize)
bool operator==(const CellCoordinate &) const =default
constexpr Vector3(float xValue, float yValue, float zValue)
constexpr Vector3()=default
float operator[](uint32_t axis) const