게임엔진/크로스플랫폼 : 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 값 감소 -> 카메라가 볼 수 있는 영역 줄어들음 -> 카메라 확대 효과