7.5 중간 과제 진행 사항 - Ritebart/3DGameArchitecture GitHub Wiki
2. 중간 과제 진행 사항
"Rederer 클래스" 키 입력에 대한 자료를 참고한 곳
Render()의 do ~ while문 안에서
void Renderer::KeyboardInput(GLFWwindow* window)
Renderer::MouseInput(GLFWwindow* window, double xposition, double yposition)
의 키보드 입력, 마우스 회전 입력을 받아 구성된 화면을 회전하며 앞 뒤로 움직이며 줌 인과 줌 아웃을 할 수 있게 만들었으며
키보드 입력은 WASD, 마우스 회전은 윈도우에 가둔 마우스 커서를 토대로 움직이며, 줌 인은 C, 줌 아웃은 V로 설정되어 있다.
내부의 코드는 인터넷에서 획득한 정보를 토대로 제작함.
또한 SettingCamera()를 만들어 함수 내부에서 유니티에 Play버튼에 해당하게 만든 P를 누르면 MainCamera의 시점으로,
그것이 아닌 경우엔 일반적으로 원하는 방향으로 카메라 돌릴 수 있게 Renderer의 멤버변수값인 SettingCameraZoom값과 SettingCameraMove값을 갱신한다.
왼쪽 shift 키를 누르면 마우스 커서가 나타나면서 화면은 멈추고 다른 작업을 할 수 있으며
왼쪽 control 키를 누르면 마우스 커서가 다시 화면에 가둬지면서 화면을 움직일 수 있게 됨.
"NonRenderableObject 클래스"
NonRenderableObject 클래스를 상속받는 오브젝트들은 위치값을 가질 필요는 있지만 화면에 그릴 필요는 없으므로 MVP와 관련된 값만 Set, Get 함수를 만들어 놓음.
"IUpdater 클래스"
Update() 함수를 가지며 DeltaTime 변수를 통해 IUpdater 클래스를 상속받은 클래스에선 프레임당 실행 시간을 동일하게 맞출 수 있음 이는 RenDeltatime() 함수를
재정의 하고 호출함으로써 사용이 가능하게 만듬.
"Camera 클래스(추가된 클래스)"
다른 엔진에서 카메라를 추가하면 생기는 그 카메라를 작동시키는 역할을 하는 클래스
NonRenderableObject, IUpdater 클래스를 상속받으며 예상되는 역할은 유니티 처럼 게임 제작에 사용할 때 둘러보는 카메라가 아닌 하이어라키에 넣어 게임 시작 시
플레이어 시점으로 고정되는 카메라의 역할임.
현재 구현사항은 유니티에서 게임시작하면 게임 화면이 메인카메라로 가는 것 처럼 실행시키고 P버튼을 누르고 있으면 MainCamera의 시점으로 일시적으로 옮겨짐
P에서 손을 떼면 원래의 카메라 움직임으로 되돌아감.
이러한 카메라는 renderer의 map타입인 nonrenderableObject에 값을 집어넣었던 Camera객체를
AddNonrenderObject(std::string name, NonRenderableObject& nonrenderableobject); 에 이름과 넣음으로써 사용가능하다.
"모든 클래스"
Get 함수들에 const를 넣어줘서 정리함.
추가한 가능들
생성자에 만들고자 하는 obj 파일 경로를 넣어 객체를 만들어 위치 조정을 하고 AddObject(*객체)를 하면 바로 화면에 추가적으로 그려집니다.
화면에 그려지지 않는 객체는 AddNonrenderObject("만들고자 하는 이름", *객체)를 하면 화면에 그려지지 않지만 영향을 미칠 수 있게 됩니다.
SetWindowSize(가로, 세로)를 통해 화면의 크기를 조정할 수 있습니다.
화면에서 WASD로 화면을 움직일 수 있으며, 마우스의 회전을 통해 화면을 회전시킬 수 있습니다.
P키를 누르면 AddNonrenderObject()에서 "MainCamera"로 넣은 객체의 Procjection 값과 View값을 받아 일시적으로 화면의 시점을 이동시킬 수 있습니다.
C키를 누르면 화면 줌 인이 되며, V키를 누르면 화면 줌 아웃이 됩니다. 또한 일정 값 이상으로 줌 인되거나 줌 아웃이 되지 않게 막아놨습니다.
왼쪽 SHIFT 키를 누르면 마우스 커서가 나타나 다른 작업을 행할 수 있으며 화면의 움직임에 영향을 주지 않게됩니다.
왼쪽 CONTROL 키를 누르면 마우스 커서가 다시 사라지며 화면의 움직임에 다시 영향을 미칩니다.