Open source Star Ruler 2 source code!

This commit is contained in:
Lucas de Vries
2018-07-17 14:15:37 +02:00
commit cc307720ff
4342 changed files with 2365070 additions and 0 deletions
+109
View File
@@ -0,0 +1,109 @@
#pragma once
#include "quaternion.h"
#include "vec2.h"
#include "line3d.h"
#include "util/refcount.h"
#include "aabbox.h"
namespace render {
class Camera : public AtomicRefCounted {
private:
quaterniond rotation;
vec3d center;
double radius;
AABBoxd positionBound;
double maxDist;
vec3d qd_zoom_point;
vec3d qd_zoom_line;
vec3d qd_world_motion;
vec3d qd_cam_motion;
vec3d qd_abs_motion;
double qd_yaw, qd_pitch, qd_roll, qd_zoom;
double qd_abs_yaw, qd_abs_pitch;
double qd_zoom_min_distance;
double zNear, zFar, fov, aspect, pxWidth, pxHeight;
bool objectCamera;
bool linearZoom;
bool lockedRotation;
public:
void yaw(double radians, bool snap = false);
void pitch(double radians, bool snap = false);
void abs_yaw(double radians, bool snap = false);
void abs_pitch(double radians, bool snap = false);
void roll(double radians, bool snap = false);
void zoom(double factor);
void snap();
void snapTranslation();
void setRadius(double radius);
double getRadius();
void abs_yaw_to(double yaw, bool snap = false);
void abs_pitch_to(double pitch, bool snap = false);
void move_cam(const vec3d& motion);
void move_cam_abs(const vec3d& motion);
void move_world(const vec3d& motion);
void move_world_abs(const vec3d& motion);
void move_abs(const vec3d& motion);
void zoomTo(double factor, const vec3d& towards, double minDistance = 0);
void zoomAlong(double factor, const vec3d& line);
void animatePercentage(double pct);
void animate(double seconds);
void setLinearZoom(bool linear);
void setLockedRotation(bool locked);
void setPositionBound(const vec3d& minimum, const vec3d& maximum);
void setMaxDistance(double dist);
//Returns the angle in physical screen space
//that a particular point is directed in from the
//center of the screen
double screenAngle(const vec3d& toPoint) const;
vec2i screenPos(const vec3d& point) const;
//Returns a ray starting at the near Z plane, ending at the
//far Z plane, with each endpoint being at <x,y> on the screen in
//normalized coordinates [0,1]
line3dd screenToRay(double x, double y) const;
vec3d getMovedPosition(vec3d pos, double pct) const;
vec3d getFinalPosition() const;
vec3d getPosition() const;
vec3d getFacing() const;
vec3d getUp() const;
vec3d getRight() const;
quaterniond getRotation() const;
vec3d getLookAt() const;
vec3d getFinalLookAt() const;
double getDistance() const;
double getYaw() const;
double getPitch() const;
double getRoll() const;
//Returns whether the camera is currently upside down
bool inverted();
void setObjectCamera(bool ObjectCamera);
void toLookAt(vec3d& cameraPosition, vec3d& cameraLookAt, vec3d& cameraUp) const;
void setRenderConstraints(double ZNear, double ZFar, double FOV_degrees, double Aspect, double w, double h);
void resetRotation();
void resetZoom();
Camera();
};
};