https://github.com/ohbumjun/GameEngineTutorial/commit/13536d609a2d0fceed2662615df37291def2e330
해당 클래스의 역할은, Camera 를 조절할 수 있는 다양성 및 변동성을 Client 단에 넘기기 위함이다.
실제 Camera Class 가 가져야할 Core 정보들은 Projection, View Matrix 등의 요소들이다.
그런데 경우에 따라 Camera 의 Pos, Rot 을 조절해서 각 게임의 특성에 맞게 Customizing 할 필요가 있을 수 있다.
따라서 이를 위해 Camera 를 감싼, 일종의 Wrapper 로서 Camera Controller Class 가 존재한다고 생각하면 된다.
Zoom 적용하기
bool OrthographicCameraController::OnMouseScrolledEvent(MouseScrolledEvent& e)
{
// change zoom level by offset
m_ZoomLevel -= e.GetYOffset();
m_ZoomLevel = std::max(m_ZoomLevel, 0.25f);
m_Camera.SetProjection(-1.f * m_AspectRatio * m_ZoomLevel, m_AspectRatio * m_ZoomLevel, -m_ZoomLevel, m_ZoomLevel);
return false;
}
void OrthographicCamera::SetProjection(float left, float right, float bottom, float top)
{
m_ProjectionMatrix = glm::ortho(left, right, bottom, top, -1.0f, 1.0f);
m_ViewProjectionMatrix = m_ProjectionMatrix * m_ViewMatrix;
}
해당 함수는 Zoom Event 가 발생할 시 호출되는 함수이다.
Zoom 이 일어나는 과정은 다음과 같다.
앞으로 scroll -> Zoom Level 은 감소 -> left, right, bottom, top 값 감소 -> 카메라가 볼 수 있는 영역 줄어들음 -> 카메라 확대 효과
'게임엔진 > 크로스플랫폼 : HazelEngine' 카테고리의 다른 글
230508 자체 엔진 개발 : Renderer2D (0) | 2023.05.26 |
---|---|
230506 자체 엔진 개발 : Resize (0) | 2023.05.09 |
230503 자체 엔진 개발 : Shader Asset File System (0) | 2023.05.07 |
230502 Hazel GameEngine : Texture Blending (0) | 2023.05.06 |
230501 자체 엔진 개발 : Texture System (0) | 2023.05.05 |