6~7주차 과제 진행사항 - Ritebart/3DGameArchitecture GitHub Wiki
1. 6주차 과제에서 7주차 과제진행으로 바뀐 사항
main()
Renderer* renderer = new Renderer();
std::vector<RenderableObject> renderobject;
renderobject.push_back(*cube);
renderobject.push_back(*human);
renderer->Render(renderobject); 형식으로 진행.
7주차에서 이러한 방법을 사용하는 것이 좋지만 직관성이 떨어지기에 좀 더 알기 쉽게 바꿈
Renderer* renderer = new Renderer();
renderer->AddObject(*cube);
renderer->AddObject(*human);
renderer->Render();
Cube 클래스 / Human 클래스
인터페이스 클래스 IUpdater를 상속받게 만들어 Update() 오버라이드를 강제시키고
이를 Renderer 클래스의 void Update(IUpdater* updateobject)를 통해 일괄적으로 Update를 시켜 IUpdater를 상속받은
클래스의 Update()만 실행하게 만듬.
Renderer 클래스
Clean()에서 내부 vector에 object가 있으면 그 오브젝트들의 Clean() 함수를 실행하고 내부 vector를 swap시켜 메모리를 해제시키게 만듬
그러나 이렇게 만들면 Renderer 클래스에서 오브젝트들의 소멸까지 담당하게 될 수도 있음
Cube 클래스와 Human 클래스들의 Clean() 의 역할이 소멸이면 이러한 방법은 좋지 않지만, 단순히 사용한 데이터 정리 및 초기화만 담당하고 소멸은 소멸자에서
시킨다고 하면 문제 없으므로 Object의 하위 클래스들의 Clean()의 역할은 데이터 정리만 하게 하고, 소멸자들은 따로 소멸자를 호출하는 클래스를 만들어 할당하는 것이
좋으나 아직은 소멸하는 부분을 만들지 않았으므로 따로 만들지 않음.
NonRenderableObject 클래스
클래스만 존재할 뿐 아무런 코드도 적혀있지 않았었으나 화면에 그려지기 위한 함수를 제외한 함수들을 추가함
virtual ~NonRenderableObject()
virtual void SetMVP(glm::mat4 m, glm::mat4 v, glm::mat4 p) override;
virtual glm::mat4 GetMVP() override;
virtual void Clean() override;
모든 클래스
헤더 파일에서 인라인 정의를 했던 함수들 중 cpp파일이 필요없는 Object 클래스의 함수들을 제외한 나머지 모든 클래스의 함수들을 cpp에서 정의함.