CSEngine
Loading...
Searching...
No Matches
CSE::CameraComponent Class Reference
Inheritance diagram for CSE::CameraComponent:
CSE::SComponent CSE::CameraBase CSE::SObject CSE::SISComponent CSE::VariableBinder

Public Types

enum  CAMERATYPE { PERSPECTIVE = 1 , ORTHO = 2 , CUBE = 3 }
 
- Public Types inherited from CSE::CameraBase
enum  BackgroundType { NONE = 0 , SOLID = 1 , SKYBOX = 2 }
 

Public Member Functions

 COMPONENT_DEFINE_CONSTRUCTOR (CameraComponent)
 
void Exterminate () override
 
void Init () override
 
void Tick (float elapsedTime) override
 
SComponentClone (SGameObject *object) override
 
void CopyReference (SComponent *src, std::map< SGameObject *, SGameObject * > lists_obj, std::map< SComponent *, SComponent * > lists_comp) override
 
void SetValue (std::string name_str, Arguments value) override
 
std::string PrintValue () const override
 
mat4 GetCameraMatrix () const
 
vec3 GetCameraPosition () const
 
mat4 GetProjectionMatrix () const
 
CameraMatrixStruct GetCameraMatrixStruct () const override
 
void SetTargetVector (const vec3 &target)
 
void SetTarget (SGameObject *gameObject)
 
void SetUp (const vec3 &up)
 
void SetCameraType (CAMERATYPE type)
 
void SetPerspectiveFov (float fov)
 
void SetZDepthRange (float near, float far)
 
void SetPerspective (float fov, float near, float far)
 
void SetOrtho (float left, float right, float top, float bottom)
 
void SetCubeCamera ()
 
void SetProjectionMatrix () const
 
SFrameBufferGetFrameBuffer () const override
 
void SetFrameBuffer (SFrameBuffer *frameBuffer)
 
BackgroundType GetBackgroundType () override
 
void RenderBackground () const override
 
void SetBackgroundSkybox (STexture *skyboxTexture=nullptr)
 
void SetBackgroundColor (vec3 &&color)
 
void SetBackgroundType (BackgroundType type)
 
- Public Member Functions inherited from CSE::SComponent
 SComponent (std::string classType, SGameObject *gameObject)
 
 SComponent (const SComponent &src)
 
void Start () override
 
virtual auto GetComponent () -> SObject *
 
void SetValue (std::string name_str, Arguments value) override
 
std::string PrintValue () const override
 
void SetGameObject (SGameObject *object)
 
virtual SGameObjectGetGameObject () const
 
virtual bool GetIsEnable () const
 
virtual void SetIsEnable (bool is_enable)
 
std::string GetClassType () const
 
void SetClassType (std::string type)
 
- Public Member Functions inherited from CSE::SObject
 SObject (bool isRegister)
 
virtual void SetUndestroyable (bool enable)
 
virtual void Destroy ()
 
virtual void __FORCE_DESTROY__ ()
 
virtual std::string GenerateMeta ()
 
std::string GetHash () const
 
virtual void SetHash (std::string &hash)
 
- Public Member Functions inherited from CSE::SISComponent
 SISComponent (const SISComponent &src)=default
 

Additional Inherited Members

- Protected Types inherited from CSE::VariableBinder
typedef std::vector< std::string > Arguments
 
- Protected Attributes inherited from CSE::SComponent
SGameObjectgameObject = nullptr
 
bool isEnable = true
 
std::string m_classType
 
- Protected Attributes inherited from CSE::SObject
std::string m_hash
 

Detailed Description

Definition at line 30 of file CameraComponent.h.

Member Enumeration Documentation

◆ CAMERATYPE

enum CSE::CameraComponent::CAMERATYPE

Definition at line 32 of file CameraComponent.h.

32 {
33 PERSPECTIVE = 1, ORTHO = 2, CUBE = 3
34 };

Member Function Documentation

◆ Clone()

SComponent * CameraComponent::Clone ( SGameObject object)
overridevirtual

Reimplemented from CSE::SComponent.

Definition at line 48 of file CameraComponent.cpp.

48 {
49 INIT_COMPONENT_CLONE(CameraComponent, comp);
50
51 comp->m_eye = m_eye;
52 comp->m_target = m_target;
53 comp->m_up = m_up;
54
55 comp->m_cameraMatrix = m_cameraMatrix;
56 comp->m_projectionMatrix = m_projectionMatrix;
57 comp->m_resultTarget = m_resultTarget;
58 comp->m_frameBuffer = m_frameBuffer;
59
60 comp->m_type = m_type;
61 comp->m_isProjectionInited = m_isProjectionInited;
62
63 //perspective
64 comp->m_pFov = m_pFov;
65 comp->m_pRatio = m_pRatio;
66
67 //Orthographic
68 comp->m_oLeft = m_oLeft;
69 comp->m_oRight = m_oRight;
70 comp->m_oBottom = m_oBottom;
71 comp->m_oTop = m_oTop;
72
73 comp->m_Near = m_Near;
74 comp->m_Far = m_Far;
75
76 //Background
77 comp->m_backgroundType = m_backgroundType;
78 comp->m_backgroundColor = m_backgroundColor;
79 if(comp->m_backgroundMap == nullptr) comp->m_backgroundMap = new BackgroundMapStruct();
80 comp->m_backgroundMap->map = m_backgroundMap->map;
81 comp->m_backgroundMap->mapId = m_backgroundMap->mapId;
82 comp->m_backgroundMap->viewId = m_backgroundMap->viewId;
83 comp->m_backgroundMap->projectionId = m_backgroundMap->projectionId;
84
85 return comp;
86}

◆ CopyReference()

void CameraComponent::CopyReference ( SComponent src,
std::map< SGameObject *, SGameObject * >  lists_obj,
std::map< SComponent *, SComponent * >  lists_comp 
)
overridevirtual

Reimplemented from CSE::SComponent.

Definition at line 88 of file CameraComponent.cpp.

89 {
90 if (src == nullptr) return;
91 auto convert = static_cast<CameraComponent*>(src);
92
93 //Copy GameObjects
94 FIND_OBJ_REFERENCE(m_targetObject, convert);
95
96}

◆ Exterminate()

void CameraComponent::Exterminate ( )
overridevirtual

Implements CSE::SObject.

Definition at line 24 of file CameraComponent.cpp.

24 {
25 SAFE_DELETE(m_backgroundMap);
26 CORE->GetCore(CameraMgr)->Remove(this);
27}

◆ GetBackgroundType()

CameraBase::BackgroundType CameraComponent::GetBackgroundType ( )
overridevirtual

Reimplemented from CSE::CameraBase.

Definition at line 253 of file CameraComponent.cpp.

253 {
254 return m_backgroundType;
255}

◆ GetCameraMatrix()

mat4 CameraComponent::GetCameraMatrix ( ) const

Definition at line 148 of file CameraComponent.cpp.

148 {
149 return m_cameraMatrix;
150}

◆ GetCameraMatrixStruct()

CameraMatrixStruct CameraComponent::GetCameraMatrixStruct ( ) const
overridevirtual

Implements CSE::CameraBase.

Definition at line 241 of file CameraComponent.cpp.

241 {
242 return { m_cameraMatrix, GetProjectionMatrix(), GetCameraPosition() };
243}

◆ GetCameraPosition()

vec3 CameraComponent::GetCameraPosition ( ) const

Definition at line 152 of file CameraComponent.cpp.

152 {
153 mat4 matrix = static_cast<TransformComponent*>(gameObject->GetTransform())->GetMatrix();
154 return vec3{ matrix.w.x, matrix.w.y, matrix.w.z };
155}

◆ GetFrameBuffer()

SFrameBuffer * CameraComponent::GetFrameBuffer ( ) const
overridevirtual

Implements CSE::CameraBase.

Definition at line 245 of file CameraComponent.cpp.

245 {
246 return m_frameBuffer;
247}

◆ GetProjectionMatrix()

mat4 CSE::CameraComponent::GetProjectionMatrix ( ) const
inline

Definition at line 59 of file CameraComponent.h.

59 {
60 if (!m_isProjectionInited) {
61 SetProjectionMatrix();
62 }
63 return m_projectionMatrix;
64 }

◆ Init()

void CameraComponent::Init ( )
overridevirtual

Implements CSE::SISComponent.

Definition at line 29 of file CameraComponent.cpp.

29 {
30 m_eye = static_cast<TransformComponent*>(gameObject->GetTransform())->GetPosition();
31
32 m_resultTarget = vec3();
33 m_pRatio = const_cast<float*>(CORE->GetCore(CameraMgr)->GetProjectionRatio());
34 Tick(0);
35}

◆ PrintValue()

std::string CameraComponent::PrintValue ( ) const
overridevirtual

Implements CSE::VariableBinder.

Definition at line 218 of file CameraComponent.cpp.

218 {
219 PRINT_START("component");
220
221 PRINT_VALUE(m_eye, ConvertSpaceStr(gameObject->GetID(gameObject->GetComponent<TransformComponent>())));
222 PRINT_VALUE_VEC3(m_target);
223 PRINT_VALUE_VEC3(m_up);
224 PRINT_VALUE(m_targetObject, m_targetObject == nullptr ? "" : ConvertSpaceStr(m_targetObject->GetHash()));
225 PRINT_VALUE_MAT4(m_cameraMatrix);
226 PRINT_VALUE_MAT4(m_projectionMatrix);
227 PRINT_VALUE(m_type, static_cast<int>(m_type));
228 PRINT_VALUE(m_pFov, m_pFov);
229 PRINT_VALUE(m_orthoValue, m_oLeft, ' ', m_oRight, ' ', m_oBottom, ' ', m_oTop);
230 PRINT_VALUE(m_distance, m_Near, ' ', m_Far);
231 if (m_frameBuffer != nullptr) PRINT_VALUE(m_frameBuffer, ConvertSpaceStr(m_frameBuffer->GetHash()));
232
233 PRINT_VALUE(m_backgroundType, static_cast<int>(m_backgroundType));
234 PRINT_VALUE_VEC3(m_backgroundColor);
235 if (m_backgroundMap != nullptr && m_backgroundMap->map != nullptr)
236 PRINT_VALUE(m_backgroundMap.map, ConvertSpaceStr(m_backgroundMap->map->GetHash()));
237
238 PRINT_END("component");
239}

◆ RenderBackground()

void CameraComponent::RenderBackground ( ) const
overridevirtual

Implements CSE::CameraBase.

Definition at line 257 of file CameraComponent.cpp.

257 {
258 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
259
260 switch (m_backgroundType) {
261 case SOLID:
262 glClearColor(m_backgroundColor.x, m_backgroundColor.y, m_backgroundColor.z, 1.0f);
263 break;
264 case SKYBOX:
265 const auto& mapStruct = m_backgroundMap;
266 if (mapStruct->map == nullptr) return;
267
268 glUseProgram(globalSkyboxHandle->Program);
269 globalSkyboxHandle->SetUniformMat4("PROJECTION_MATRIX", m_projectionMatrix);
270 auto viewMatrix = mat4(m_cameraMatrix.ToMat3());
271 globalSkyboxHandle->SetUniformMat4("VIEW_MATRIX", viewMatrix);
272 mapStruct->map->Bind(mapStruct->mapId, 0);
273
274 glDisable(GL_CULL_FACE);
275 glDisable(GL_DEPTH_TEST);
276 ShaderUtil::BindAttributeToCubeMap();
277 glEnable(GL_DEPTH_TEST);
278 glEnable(GL_CULL_FACE);
279 break;
280 }
281}

◆ SetBackgroundColor()

void CameraComponent::SetBackgroundColor ( vec3 &&  color)

Definition at line 296 of file CameraComponent.cpp.

296 {
297 m_backgroundColor = color;
298}

◆ SetBackgroundSkybox()

void CameraComponent::SetBackgroundSkybox ( STexture skyboxTexture = nullptr)

Definition at line 283 of file CameraComponent.cpp.

283 {
284 if (skyboxTexture == nullptr) {
285 skyboxTexture = SResource::Get<STexture>("envCubemap.textureCubeMap");
286 }
287 if (m_backgroundMap == nullptr) m_backgroundMap = new BackgroundMapStruct();
288
289 m_backgroundMap->map = skyboxTexture;
290 m_backgroundMap->mapId = static_cast<unsigned short>(globalSkyboxHandle->UniformLocation("ENV_MAP")->id);
291 m_backgroundMap->viewId = static_cast<unsigned short>(globalSkyboxHandle->UniformLocation("VIEW_MATRIX")->id);
292 m_backgroundMap->projectionId = static_cast<unsigned short>(globalSkyboxHandle->UniformLocation(
293 "PROJECTION_MATRIX")->id);
294}

◆ SetBackgroundType()

void CameraComponent::SetBackgroundType ( CameraBase::BackgroundType  type)

Definition at line 300 of file CameraComponent.cpp.

300 {
301 m_backgroundType = type;
302}

◆ SetCameraType()

void CameraComponent::SetCameraType ( CAMERATYPE  type)

Definition at line 110 of file CameraComponent.cpp.

110 {
111 m_type = type;
112}

◆ SetCubeCamera()

void CameraComponent::SetCubeCamera ( )

Definition at line 140 of file CameraComponent.cpp.

140 {
141 m_type = CUBE;
142}

◆ SetFrameBuffer()

void CameraComponent::SetFrameBuffer ( SFrameBuffer frameBuffer)

Definition at line 249 of file CameraComponent.cpp.

249 {
250 m_frameBuffer = frameBuffer;
251}

◆ SetOrtho()

void CameraComponent::SetOrtho ( float  left,
float  right,
float  top,
float  bottom 
)

Definition at line 132 of file CameraComponent.cpp.

132 {
133 m_type = ORTHO;
134 m_oLeft = left;
135 m_oRight = right;
136 m_oBottom = bottom;
137 m_oTop = top;
138}

◆ SetPerspective()

void CameraComponent::SetPerspective ( float  fov,
float  near,
float  far 
)

Definition at line 124 of file CameraComponent.cpp.

124 {
125 m_type = PERSPECTIVE;
126 m_pFov = fov;
127 m_Near = near;
128 m_Far = far;
129
130}

◆ SetPerspectiveFov()

void CameraComponent::SetPerspectiveFov ( float  fov)

Definition at line 114 of file CameraComponent.cpp.

114 {
115 m_pFov = fov;
116}

◆ SetProjectionMatrix()

void CameraComponent::SetProjectionMatrix ( ) const

Definition at line 157 of file CameraComponent.cpp.

157 {
158 std::mutex mutex;
159 mutex.lock();
160
161 switch (m_type) {
162 case PERSPECTIVE:
163 m_projectionMatrix = mat4::Perspective(m_pFov, *m_pRatio, m_Near, m_Far);
164 break;
165 case ORTHO:
166 m_projectionMatrix = mat4::Ortho(m_oLeft, m_oRight, m_oTop, m_oBottom, m_Near, m_Far);
167 break;
168 case CUBE:
169 m_projectionMatrix = mat4::Perspective(90.0f, 1.0f, 0.1f, 10.0f);
170 break;
171 }
172
173 m_isProjectionInited = true;
174 mutex.unlock();
175}

◆ SetTarget()

void CameraComponent::SetTarget ( SGameObject gameObject)

Definition at line 102 of file CameraComponent.cpp.

102 {
103 m_targetObject = gameObject;
104}

◆ SetTargetVector()

void CameraComponent::SetTargetVector ( const vec3 target)

Definition at line 98 of file CameraComponent.cpp.

98 {
99 m_target = target;
100}

◆ SetUp()

void CameraComponent::SetUp ( const vec3 up)

Definition at line 106 of file CameraComponent.cpp.

106 {
107 m_up = up;
108}

◆ SetValue()

void CameraComponent::SetValue ( std::string  name_str,
VariableBinder::Arguments  value 
)
overridevirtual

Implements CSE::VariableBinder.

Definition at line 177 of file CameraComponent.cpp.

177 {
178 if (name_str == "m_eye") {
179 m_eye = static_cast<TransformComponent*>(
180 SGameObject::FindByHash(value[0])->GetTransform()
181 )->GetPosition();
182 } else if (name_str == "m_target") {
183 SET_VEC3(m_target);
184 } else if (name_str == "m_up") {
185 SET_VEC3(m_up);
186 } else if (name_str == "m_targetObject") {
187 if(value.size() <= 0) return;
188 m_targetObject = SGameObject::FindByHash(value[0]);
189 } else if (name_str == "m_cameraMatrix") {
190 SET_MAT4(m_cameraMatrix);
191 } else if (name_str == "m_projectionMatrix") {
192 SET_MAT4(m_projectionMatrix);
193 } else if (name_str == "m_type") {
194 m_type = static_cast<CAMERATYPE>(std::stoi(value[0]));
195 } else if (name_str == "m_pFov") {
196 m_pFov = std::stof(value[0]);
197 } else if (name_str == "m_orthoValue") {
198 m_oLeft = std::stof(value[0]);
199 m_oRight = std::stof(value[1]);
200 m_oBottom = std::stof(value[2]);
201 m_oTop = std::stof(value[3]);
202
203 } else if (name_str == "m_distance") {
204 m_Near = std::stof(value[0]);
205 m_Far = std::stof(value[1]);
206 } else if (name_str == "m_frameBuffer") {
207 m_frameBuffer = SResource::Create<SFrameBuffer>(value[0]);
208 } else if (name_str == "m_backgroundType") {
209 m_backgroundType = static_cast<BackgroundType>(std::stoi(value[0]));
210 } else if (name_str == "m_backgroundColor") {
211 SET_VEC3(m_backgroundColor);
212 } else if (name_str == "m_backgroundMap.map") {
213 SetBackgroundSkybox(SResource::Create<STexture>(value[0]));
214 }
215
216}

◆ SetZDepthRange()

void CameraComponent::SetZDepthRange ( float  near,
float  far 
)

Definition at line 118 of file CameraComponent.cpp.

118 {
119 m_Near = near;
120 m_Far = far;
121
122}

◆ Tick()

void CameraComponent::Tick ( float  elapsedTime)
overridevirtual

Implements CSE::SISComponent.

Definition at line 37 of file CameraComponent.cpp.

37 {
38 if(m_type == CUBE) return;
39
40 if (m_targetObject == nullptr)
41 m_resultTarget = *m_eye + m_target;
42 else {
43 m_resultTarget = *static_cast<TransformComponent*>(m_targetObject->GetTransform())->GetPosition();
44 }
45 SetCameraMatrix();
46}

The documentation for this class was generated from the following files: