DirectX 11 스터디 - 고유 물체를 정의할 GameObject 만들기
여기까지 개발한 렌더링 처리 객체인 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
<DirectX 12를 이용한 3D 게임 프로그래밍 입문> 구입 링크
https://link.coupang.com/a/8V4Wq
<이득우의 게임 수학:39가지 예제로 배운다! 메타버스를 구성하는 게임 수학의 모든 것> 구입 링크
https://link.coupang.com/a/9BqLd
유니티 에셋 스토어 링크
https://assetstore.unity.com?aid=1011lvz7h
(링크를 통해 도서/에셋 구입시 일정액의 수수료를 지급받습니다.)