GlistEngine
Loading...
Searching...
No Matches
gCamera.h
Go to the documentation of this file.
1/*
2 * gCamera.h
3 *
4 * Created on: May 10, 2020
5 * Author: noyan
6 */
7
8#ifndef ENGINE_GRAPHICS_GCAMERA_H_
9#define ENGINE_GRAPHICS_GCAMERA_H_
10
11//#include <GL/glew.h>
12#include "gNode.h"
13#include "gSkybox.h"
14#include "gBoundingBox.h"
15
16#include <glm/gtc/matrix_transform.hpp>
17#include <glm/gtc/type_ptr.hpp>
18
19class gCamera : public gNode {
20public:
21// gCamera();
22 gCamera(glm::vec3 camPosition = glm::vec3(0.0f, 0.0f, 0.0f));
23 gCamera(float posX, float posY, float posZ);
24 virtual ~gCamera();
25
26 void begin();
27 void end();
28
29 void setFov(float f);
30 void setNearClip(float nearClip);
31 void setFarClip(float farClip);
32 float getNearClip() const {return nearclip;} // needed for grid
33 float getFarClip() const {return farclip;} // needed for grid
34 float getFov() const {return fov;}
35
36 void move(float dx, float dy, float dz);
37 void move(const glm::vec3 dv);
38 void rotate(const glm::quat& q);
39 void rotate(float radians, float ax, float ay, float az);
40 void rotateDeg(float angle, float ax, float ay, float az);
41 void rotateAround(float radians, const glm::vec3& axis, const glm::vec3& point);
42 void rotateAroundDeg(float degrees, const glm::vec3& axis, const glm::vec3& point);
43 void scale(float sx, float sy, float sz);
44 void scale(float s);
45
46 void setPosition(float px, float py, float pz);
47 void setPosition(const glm::vec3 pv);
48 void setOrientation(const glm::quat& o);
49 void setOrientation(const glm::vec3& angles);
50 void setScale(const glm::vec3& s);
51 void setScale(float sx, float sy, float sz);
52 void setScale(float s);
53
54 void dolly(float distance);
55 void truck(float distance);
56 void boom(float distance);
57 void tilt(float radians);
58 void pan(float radians);
59 void roll(float radians);
60 void tiltDeg(float degrees);
61 void panDeg(float degrees);
62 void rollDeg(float degrees);
63
64 void lookAt(const glm::vec3& point);
65 void rotateLook(float angle, float ax, float ay, float az);
66 void resetLook();
67 const glm::mat4& getLookMatrix() const;
68 const glm::quat& getLookOrientation() const;
69
70 void drawGizmos();
71
72 bool isInFrustum(const gBoundingBox& box) const;
73
74protected:
76
77 struct Plane {
78 glm::vec3 normal;
79 float distance;
80
81 Plane() = default;
82
83 Plane(const glm::vec3& p1, const glm::vec3& norm)
84 : normal(glm::normalize(norm)),
85 distance(glm::dot(normal, p1)) {
86 }
87
88 float getSignedDistanceToPlane(const glm::vec3& point) const {
89 return glm::dot(normal, point) - distance;
90 }
91
92 bool checkAABB(const gBoundingBox& aabb) const {
93 // Compute the projection interval radius of b onto L(t) = b.c + t * p.n
94 const float r = aabb.getWidth() * std::abs(normal.x) + aabb.getHeight() * std::abs(normal.y) +
95 aabb.getDepth() * std::abs(normal.z);
96 return -r <= getSignedDistanceToPlane(aabb.getOrigin());
97 }
98 };
109
111
112 glm::vec3 lookposition;
114 glm::vec3 lookscalevec;
117
118
120
121 void rotateGizmos(const glm::quat& o);
122 void rotateGizmos(float radians, float ax, float ay, float az);
123 void rotateDegGizmos(float angle, float ax, float ay, float az);
124 void setOrientationGizmos(const glm::quat& o);
125
126 void tiltGizmos(float radians);
127 void panGizmos(float radians);
128 void rollGizmos(float radians);
129
130 void tiltDegGizmos(float degrees);
131 void panDegGizmos(float degrees);
132 void rollDegGizmos(float degrees);
133
134};
135#endif /* ENGINE_GRAPHICS_GCAMERA_H_ */
Definition gBoundingBox.h:36
const glm::vec3 & getOrigin() const
float getWidth() const
float getDepth() const
float getHeight() const
Definition gCamera.h:19
void setOrientation(const glm::quat &o)
void setFov(float f)
void resetLook()
void setScale(const glm::vec3 &s)
glm::mat4 locallookmatrix
Definition gCamera.h:115
void drawGizmos()
void processLookMatrix()
gCamera(glm::vec3 camPosition=glm::vec3(0.0f, 0.0f, 0.0f))
void rotateLook(float angle, float ax, float ay, float az)
float fov
Definition gCamera.h:75
gSkybox * gizmos
Definition gCamera.h:119
float nearclip
Definition gCamera.h:75
void rollDeg(float degrees)
void panDegGizmos(float degrees)
void begin()
void rotate(const glm::quat &q)
void setNearClip(float nearClip)
void setScale(float sx, float sy, float sz)
float getFov() const
Definition gCamera.h:34
void dolly(float distance)
float getNearClip() const
Definition gCamera.h:32
void truck(float distance)
float farclip
Definition gCamera.h:75
void panDeg(float degrees)
void setPosition(float px, float py, float pz)
glm::quat lookorientation
Definition gCamera.h:113
void move(const glm::vec3 dv)
virtual ~gCamera()
void setOrientationGizmos(const glm::quat &o)
void rotateDeg(float angle, float ax, float ay, float az)
void rotateGizmos(float radians, float ax, float ay, float az)
glm::vec3 lookposition
Definition gCamera.h:112
Frustum frustum
Definition gCamera.h:110
void setOrientation(const glm::vec3 &angles)
void roll(float radians)
void rotateAround(float radians, const glm::vec3 &axis, const glm::vec3 &point)
void boom(float distance)
const glm::mat4 & getLookMatrix() const
void end()
void pan(float radians)
void scale(float sx, float sy, float sz)
void tiltDegGizmos(float degrees)
void tilt(float radians)
void setPosition(const glm::vec3 pv)
void setFarClip(float farClip)
void rollDegGizmos(float degrees)
void scale(float s)
void tiltDeg(float degrees)
void rollGizmos(float radians)
void rotateDegGizmos(float angle, float ax, float ay, float az)
void rotateAroundDeg(float degrees, const glm::vec3 &axis, const glm::vec3 &point)
void move(float dx, float dy, float dz)
float getFarClip() const
Definition gCamera.h:33
void rotate(float radians, float ax, float ay, float az)
void lookAt(const glm::vec3 &point)
void setScale(float s)
void tiltGizmos(float radians)
bool isInFrustum(const gBoundingBox &box) const
void rotateGizmos(const glm::quat &o)
const glm::quat & getLookOrientation() const
glm::vec3 lookscalevec
Definition gCamera.h:114
void panGizmos(float radians)
gCamera(float posX, float posY, float posZ)
Definition gNode.h:15
Definition gSkybox.h:29
float r
Definition gColor.h:22
Definition gCamera.h:99
Plane leftFace
Definition gCamera.h:104
Plane rightFace
Definition gCamera.h:103
Plane nearFace
Definition gCamera.h:107
Plane farFace
Definition gCamera.h:106
Plane bottomFace
Definition gCamera.h:101
Plane topFace
Definition gCamera.h:100
Definition gCamera.h:77
float distance
Definition gCamera.h:79
bool checkAABB(const gBoundingBox &aabb) const
Definition gCamera.h:92
Plane(const glm::vec3 &p1, const glm::vec3 &norm)
Definition gCamera.h:83
Plane()=default
glm::vec3 normal
Definition gCamera.h:78
float getSignedDistanceToPlane(const glm::vec3 &point) const
Definition gCamera.h:88