게임 개발 자료/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
<DirectX 12를 이용한 3D 게임 프로그래밍 입문> 구입 링크
https://link.coupang.com/a/8V4Wq
<이득우의 게임 수학:39가지 예제로 배운다! 메타버스를 구성하는 게임 수학의 모든 것> 구입 링크
https://link.coupang.com/a/9BqLd
유니티 에셋 스토어 링크
https://assetstore.unity.com?aid=1011lvz7h
(링크를 통해 도서/에셋 구입시 일정액의 수수료를 지급받습니다.)
728x90
반응형