12 int _screenWidth = 800, _screenHeight = 640;
14 glm::vec3 eyePos{ 0,0,0 };
15 glm::vec3 aimPos{ 0,0,0 };
16 glm::vec3 upDir{ 0,-1,0 };
17 float zFar = 1000000.0f;
19 ViewMode currentViewMode = ViewMode::Y_UP;
24 virtual void init() = 0;
27 virtual void update() = 0;
30 glm::vec3 convertScreenToWorldPlane(glm::vec2 screenCoords,
float depth = 0.0f);
33 virtual glm::ivec2 getCameraDimensions()
const = 0;
36 virtual SDL_FRect getCameraRect()
const = 0;
38 glm::vec3 convertScreenToWorldDistance(glm::vec2 screenCoords,
float depth);
41 glm::vec3 getPosition()
const;
42 void setPosition(
const glm::vec3 newPosition);
43 void setPosition_X(
const float newPosition);
44 void setPosition_Y(
const float newPosition);
45 void setPosition_Z(
const float newPosition);
46 float getScale()
const;
47 glm::mat4 getCameraMatrix()
const;
48 glm::vec3 getAimPos();
49 void setScale(
float scale);
51 void makeCameraDirty();
55 void updateCameraOrientation();
57 void setOrientation(glm::vec3 eye, glm::vec3 target, glm::vec3 up);
59 bool isPointInCameraView(
const glm::vec4 point,
float margin);
62 glm::vec3 castRayAt(
const glm::vec2& screenPos);
64 glm::vec3 getPointOnRayAtZ(
const glm::vec3& rayOrigin,
const glm::vec3& rayDirection,
float desiredZ);
66 void setViewMatrix(glm::mat4 newViewMatrix);
68 glm::mat4 getViewMatrix();
70 void setProjMatrix(glm::mat4 newProjMatrix);
72 glm::mat4 getProjMatrix();
74 glm::vec3 getForwardDir();
75 glm::vec3 getRightDir();
78 void movePosition_Hor(
const float step);
79 void movePosition_Vert(
const float step);
80 void movePosition_Forward(
const float step);
81 void setAimPos(
const glm::vec3 newAimPos);
82 void moveAimPos(glm::vec3 startingAimPos,
const glm::vec2 distance);
86 glm::mat4 _projectionMatrix = glm::mat4(1.0f);
87 glm::mat4 _viewMatrix = glm::mat4(1.0f);
88 glm::mat4 _cameraMatrix = glm::mat4(1.0f);
90 bool _cameraChange =
true;