16 int _screenWidth = 800, _screenHeight = 640;
18 glm::vec3 eyePos{ 0,0,0 };
19 glm::vec3 aimPos{ 0,0,0 };
20 glm::vec3 upDir{ 0,-1,0 };
21 float zFar = 1000000.0f;
23 ViewMode currentViewMode = ViewMode::Y_UP;
28 virtual void init() = 0;
31 virtual void update() = 0;
34 virtual glm::vec2 convertScreenToWorld(glm::vec2 screenCoords)
const = 0;
37 virtual glm::ivec2 getCameraDimensions()
const = 0;
40 virtual SDL_FRect getCameraRect()
const = 0;
43 virtual glm::vec3 getPosition()
const = 0;
44 virtual void setPosition(
const glm::vec3 newPosition) = 0;
45 virtual void setPosition_X(
const float newPosition) = 0;
46 virtual void setPosition_Y(
const float newPosition) = 0;
47 virtual void setPosition_Z(
const float newPosition) = 0;
48 virtual float getScale()
const = 0;
49 virtual glm::mat4 getCameraMatrix()
const = 0;
50 virtual glm::vec3 getAimPos() = 0;
51 virtual void setScale(
float scale) = 0;
53 virtual void makeCameraDirty() = 0;
54 virtual bool hasChanged() = 0;
55 virtual void refreshCamera() = 0;
57 void updateCameraOrientation();
59 void setOrientation(glm::vec3 eye, glm::vec3 target, glm::vec3 up);
61 bool isPointInCameraView(
const glm::vec4 point,
float margin);
64 glm::vec3 castRayAt(
const glm::vec2& screenPos);
66 glm::vec3 getPointOnRayAtZ(
const glm::vec3& rayOrigin,
const glm::vec3& rayDirection,
float desiredZ);
68 void setViewMatrix(glm::mat4 newViewMatrix);
70 glm::mat4 getViewMatrix();
72 void setProjMatrix(glm::mat4 newProjMatrix);
74 glm::mat4 getProjMatrix();
78 glm::mat4 _projectionMatrix = glm::mat4(1.0f);
79 glm::mat4 _viewMatrix = glm::mat4(1.0f);
80 glm::mat4 _cameraMatrix = glm::mat4(1.0f);
82 bool _cameraChange =
true;