게임 개발 자료/DirectX 스터디

DirectX 11 스터디 - MeshRenderer 컴포넌트 (GameObject 완)

원생계 2023. 9. 26. 17:41

렌더링 관련 처리를 담당해줄 MeshRenderer 컴포넌트를 생성. GameObject 에 몰려있던 Device, DeviceContext를 모두 MeshRenderer 로 이동시켜주고 MeshRenderer 의 Render() 함수를 호출해서 렌더링 처리를 하게 해준다.

 

이제 GameObject 는 DirectX COM 객체를 가질 필요가 없어짐.

class GameObject : public enable_shared_from_this<GameObject>
{
public:
	GameObject();
	~GameObject() {}

	void Awake();
	void Start();
	void Update();
	void LateUpdate();
	void FixedUpdate();

	shared_ptr<Component> GetFixedComponent(ComponentType type);
	shared_ptr<Transform> GetTransform();
	shared_ptr<Camera> GetCamera();
	shared_ptr<MeshRenderer> GetMeshRenderer();

	shared_ptr<Transform> GetOrAddTransform();
	void AddComponent(shared_ptr<Component> component);

private:
	array<shared_ptr<Component>, FIXED_COMPONENT_COUNT> _components;
	vector<shared_ptr<MonoBehaviour>> _scripts;
};

Game::Init() 함수에서 GameObject를 생성할 때 MeshRenderer를 추가해주면서 초기화 해주면, 이제 Rendering 관련 모든 처리는 MeshRenderer 가 할 수 있게 됨.

void Game::Init(HWND hwnd)
{
	_hwnd = hwnd;

	_RHI = make_shared<D3D11RHI>(hwnd);
	_pipeline = make_shared<Pipeline>(_RHI->GetDeviceContext());

	_monster = make_shared<GameObject>();
	_monster->GetOrAddTransform();
	_monster->GetTransform()->SetScale(Vec3(1.f, 1.f, 1.f));
	_monster->AddComponent(make_shared<MeshRenderer>(_RHI->GetDevice(), _RHI->GetDeviceContext()));

	_camera = make_shared<GameObject>();
	_camera->GetOrAddTransform();
	_camera->AddComponent(make_shared<Camera>());
}

void Game::Render()
{
	_RHI->RenderBegin();

	_monster->GetMeshRenderer()->Render(_pipeline);

	_RHI->RenderEnd();
}

GameObject는 Component 의 컨테이너/관리자 역할만 하게 되고, 기능적인 부분들은 모두 컴포넌트 Transform, Camera, MeshRenderer 가 가져가게 됨.


<리얼-타임 렌더링(REAL-TIME RENDERING) 4/e> 구입 링크
https://link.coupang.com/a/8VWas

 

리얼-타임 렌더링 4/e

COUPANG

www.coupang.com

<DirectX 12를 이용한 3D 게임 프로그래밍 입문> 구입 링크
https://link.coupang.com/a/8V4Wq

 

DirectX 12를 이용한 3D 게임 프로그래밍 입문:게임 개발 중심으로 익히는 대화식 컴퓨터 그래픽 프

COUPANG

www.coupang.com

<이득우의 게임 수학:39가지 예제로 배운다! 메타버스를 구성하는 게임 수학의 모든 것> 구입 링크

https://link.coupang.com/a/9BqLd

 

이득우의 게임 수학:39가지 예제로 배운다! 메타버스를 구성하는 게임 수학의 모든 것

COUPANG

www.coupang.com

유니티 에셋 스토어 링크

https://assetstore.unity.com?aid=1011lvz7h 

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

(링크를 통해 도서/에셋 구입시 일정액의 수수료를 지급받습니다.)


728x90
반응형