DirectX/[개인] DirectX11 Volume Rendering

2. Input 및 Camera 구현

헛둘이 2025. 2. 23. 23:42

1. 키보드 및 마우스 입력 구현

형식 자체는 기존에 게임 개발 시 직접 만들었던 프레임워크를 참고하되, 현재 렌더러 프로젝트에 맞게 변형하여 사용하였습니다.

- 입력값을 어디서든 사용할 수 있도록 싱글톤 패턴으로 구현하였습니다.

싱글톤 매크로 (DECLARE_SINGLE)

- 키보드 및 마우스 입력을 구현함으로써 입력에 대한 처리를 수행할 수 있게 되었고, 다음에 구현할 카메라 클래스가 해당 기능을 사용하게 됩니다.

 

2. 카메라 클래스 구현

- 카메라에서는 뷰행렬 및 투영행렬을 만드는 역할을 합니다.

- 따라서 멤버변수로 변환행렬을 만들기 위한 변수들을 들고 있습니다.

- 굳이 클래스로 뺀 이유는 카메라의 월드행렬을 만들고 용이하게 관리하기 위함입니다.

- 카메라를 객체로 둔다면 카메라의 월드행렬의 역행렬을 통해 간단히 뷰행렬을 구할 수 있는 이점도 있을 뿐더러,

카메라를 이동하는 기능을 유연하게 구현할 수 있습니다.

 

- Update에서 InputManager를 이용하여 입력을 처리하고 있는 부분입니다.

- 키보드 입력과 마우스 입력을 제어함으로써 키 입력에 따라 카메라가 어떻게 움직일 것인지 구현이 가능합니다.

- W/S/A/D 키를 통해 바라보는 방향 (Look)으로 이동하거나 좌, 우(Right)로 이동할 수 있습니다.

- 마우스는 시점을 변환할 때 사용하였는데, 우클릭 후 마우스 이동 시 이동량을 검출하여 그 양만큼 회전시켰습니다.

- 다만 너무 많은 양이 이동할 경우 화면이 뚝뚝 끊겨보일 수 있기 때문에 선형보간(Lerp)를 통해 부드럽게 이동될 수 있도록 했습니다.

 

- 뷰행렬과 투영행렬을 만드는 부분입니다.

- 우선 처음에 카메라의 월드행렬을 만듭니다. (SRT 행렬)

- 카메라의 월드행렬의 역행렬이 뷰행렬이므로 뷰행렬은 간단히 구해줄 수 있습니다.

- 앞서 서술했던 멤버변수인 FOV, 종횡비, 카메라가 표현할 절두체의 최소지점, 최대지점을 통해 투영행렬을 계산합니다.

- 그리고 그 값을 m_matVP에 저장합니다.

- m_matVP는 Renderer의 Render에서 상수버퍼로 GPU로 넘어가게 되고, 모든 점들은 Vertex Shader에서 이 VP 행렬에 의해 적절한 위치로 변환됩니다.