게임 개발 자료/DirectX 스터디

DirectX 11 스터디 - 고유 물체를 정의할 GameObject 만들기

원소랑 2023. 9. 20. 18:46
728x90

여기까지 개발한 렌더링 처리 객체인 Pipeline, 그리고 물체마다 고유한 값을 가질 수 있는 객체들을 모아서 GameObject 를 만들어본다. 방향성은, 유니티 엔진의 GameObject 스타일로 만들고, Transform 처리는 컴포넌트 형태로 만들어 붙여보는 순서로 진행.

 

한번에 몰아서 구현하던 Game 클래스에서, 물체마다 고유한 값을 가져야 하는 객체들을 모두 GameObject 로 옮겨서 구현.

class GameObject
{
public:
	GameObject(ComPtr<ID3D11Device> device, ComPtr<ID3D11DeviceContext> deviceContext);
	~GameObject() {}

	void Update();
	void Render(shared_ptr<Pipeline> pipeline);

private:
	ComPtr<ID3D11Device> _device;
	
	// 물체마다 고유한 값을 가질 수 있는 객체들
	shared_ptr<Geometry<VertexTextureData>> _geometry;
	shared_ptr<VertexBuffer> _vertexBuffer;
	shared_ptr<IndexBuffer> _indexBuffer;
	shared_ptr<InputLayout> _inputLayout;

	shared_ptr<VertexShader> _vertexShader;
	shared_ptr<PixelShader> _pixelShader;
	shared_ptr<ConstantBuffer<TransformData>> _constantBuffer;
	shared_ptr<Texture> _texture1;
	shared_ptr<SamplerState> _samplerState;
	shared_ptr<RasterizerState> _rasterizerState;
	shared_ptr<BlendState> _blendState;

private:
	// SRT
	TransformData _transformData;

	Vec3 _localPosition = { 0.f, 0.f, 0.f };
	Vec3 _localRotation = { 0.f, 0.f, 0.f };
	Vec3 _localScale = { 1.f, 1.f, 1.f };
};

객체들의 생성부를 GameObject 생성자로 옮기고, Update, Render 함수 내용도 하나씩 모두 이동.

void Game::Init(HWND hwnd)
{
	_hwnd = hwnd;
	_RHI = make_shared<D3D11RHI>(hwnd);
	_pipeline = make_shared<Pipeline>(_RHI->GetDeviceContext());

	_gameObject = make_shared<GameObject>(_RHI->GetDevice(), _RHI->GetDeviceContext());
}

void Game::Update()
{
	_gameObject->Update();
}

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

	{
    	_gameObject->Render(_pipeline);
    }

	_RHI->RenderEnd();
}

이렇게.

 

여기까지 GameObject 작성 완료.

유니티의 GameObject 구조를 따라가기로. GameObject 는 Component의 컨테이너 역할을 하고, 스케일, 회전, 이동 처리는 Transform 컴포넌트를 만들어서 처리할 수 있도록 다음 노트에서 이어서 작업.


<리얼-타임 렌더링(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
반응형