게임 개발 자료/DirectX 스터디

DirectX 11 스터디 - 모듈화 (1)

원소랑 2023. 9. 19. 18:17

앞선 스터디 과정에서는 하나의 클래스에 DirectX 객체들을 모두 모아서 구현했었음. 한 클래스에 모아서 구현했던 객체들과 개념, 동작들은 아래와 같음.

 

DirectX 핵심 객체 : Device, DeviceContext, SwapChain

Render Target : SwapChain 에서 백버퍼를 가져와서 RenderTarget 생성

RenderBegin : 렌더타겟뷰 셋팅, 클리어. 뷰포트 셋팅.
RenderEnd : 에서 SwapChain->Present 호출해서 백버퍼 고속복사로 화면 갱신.

Geometry 데이터 생성 및 관리
Vertex Buffer, Index Buffer 생성
Input Layout 생성 및 설정

Vertex Shader, Pixel Shader

Texture 로드, Shader Resource View 생성

Rasterizer State, Sampler State, Blend State

 

렌더링 파이프라인에 참여하는 객체와 개념들의 수가 많고 복잡한데, 구조화를 통해 책임과 역할을 구분하고 설계한다.

구조화를 위한 클래스와 역할 구분

클래스 이름과 설명.

Graphics :  장치 추상화 핵심 객체를 갖는 클래스. 언리얼 엔진에서는 RHI 로 명명해서 DX, Vulkan, Metal 등을 추상화.

(RHI = Render Hardware Interface)

Device, DeviceContext, SwapChain, Viewport

 

Geometry : 버텍스와 인덱스 등 3D 기하학 데이터 관리. 어떤 버텍스 데이터 타입 배열을 받을지 모르니 템플릿으로 작성.

VertextBuffer : 버텍스용 D3D 버퍼 관리. 어떤 버텍스 데이터 타입 배열을 받을지 모르니 템플릿으로 작성.

IndexBuffer : 인덱스용 D3D 버퍼 관리

VertexData, InputLayout : Vertex 하나의 데이터 구조/레이아웃 선언, 세팅

Shader(Vertex/Pixel) : Vertex Shader, Pixel Shader 로드/컴파일 및 관리

ConstantBuffer : 상수 버퍼 생성 관리. 상수 데이터로 다양한 구조체를 받을 수 있게 템플릿으로 작성.

Texture : 텍스쳐 파일을 로드하고 ShaderResourceView 를 생성.

 

여기까지 생성한 객체들.

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<Texture> _texture1;
shared_ptr< ConstantBuffer<TransformData>> _constantBuffer;

 

위 객체들 초기화 코드 참고. D3D 객체들을 모두 은닉화.

_RHI = make_shared<D3D11RHI>(hwnd);
_geometry = make_shared<Geometry<VertexTextureData >>();
_vertexBuffer = make_shared<VertexBuffer>(_RHI->GetDevice());
_indexBuffer = make_shared<IndexBuffer>(_RHI->GetDevice());

GeometryHelper::CreateRectangle(_geometry);
_vertexBuffer->Create(_geometry->GetVertices());
_indexBuffer->Create(_geometry->GetIndices());

_vertexShader = make_shared<VertexShader>(_RHI->GetDevice());
_vertexShader->Create(L"Default.hlsl", "VS", "vs_5_0");

_inputLayout = make_shared<InputLayout>(_RHI->GetDevice());
_inputLayout->Create(VertexTextureData::descs, _vertexShader->GetBlob());

_pixelShader = make_shared<PixelShader>(_RHI->GetDevice());
_pixelShader->Create(L"Default.hlsl", "PS", "ps_5_0");

_texture1 = make_shared<Texture>(_RHI->GetDevice());
_texture1->Create(L"Skeleton.png");

_constantBuffer = make_shared<ConstantBuffer<TransformData>>(_RHI->GetDevice(), _RHI->GetDeviceContext()) ;
_constantBuffer->Create();

 

다음은 구조화 마무리 단계.


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