Programming/Soft Renderer_2020

GameEngine 2D : GameObject, Camera

Gyong_ 2020. 5. 26. 20:46

소프트렌더러 프로젝트에 여러 개의 게임 오브젝트를 구현.

GameEngine.cpp / LoadScene

 

 

소프트렌더러 프로젝트에서 카메라를 따라 플레이어를 구현

SoftRenderer2D.cpp / Update2D

 

 

결과

 

 

소프트렌더 전체 프로세스 정리

 

 

 

렌더링 파이프라인 

 

GameEngine, GameObject2D 클래스에서 각 멤버 변수 유형에 대한 적절한 이유는?

 

Smart Pointer에는 세 가지 포인터가 존재한다.

1. Shared_ptr : 인스턴스를 가리키는 포인터의 갯수를 카운팅하여 메모리 누수가 발생하지 않도록 한다.
2. unique_ptr : 하나의 포인터만이 해당 인스턴스를 가리킬 수 있도록 한다.
3. weak_ptr : 하나 이상의 shared_ptr가 가리키는 객체를 참조할 수 있지만 reference count를 늘리지 않는다.

 

C#과 언리얼에서는 unique_ptr이 아닌 Shared_ptr을 사용한다.

왜냐하면 C#과 언리얼 엔진에서는 GC(가비지컬렉션)를 통해서 메모리를 관리하기 때문에 어쩔 수 없이

Shared_ptr을 사용을 해야한다.

 

_Player

_QuadMesh

_Camera2D

 

위에 3가지 멤버 변수는 각각의 인스턴스에 대한 유니크 포인터이다.

이것을 사용하는 이유는 파생 클래스를 처리하거나 또는 원하는 곳에서 객체를 생성과 소멸시키기 위해서이다.

 

_Transform 

Transform2D는 하나의 변수로 선언한다. 왜냐하면 모든 게임 오브젝트는 최소 하나씩의 값을 가지고 있기 때문이다.

 

_MeshPtr

Mesh는 일반 포인터를 사용한다. 왜냐하면 Mesh는 엔진을 초기화할 때 이미 생성된 초기 Mesh 데이터를 사용하기

때문이다. 또한 Mesh 데이터는 처음에 생성이 된 후에는 변화가 생겨서는 안 된다.