게임엔진/크로스플랫폼 : HazelEngine

230504 Hazel GameEngine : CameraController , Zoom 적용하기

mrawesome 2023. 5. 8. 23:12

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 값 감소 -> 카메라가 볼 수 있는 영역 줄어들음 -> 카메라 확대 효과