728x90

다이렉트X 11

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

여기까지 개발한 렌더링 처리 객체인 Pipeline, 그리고 물체마다 고유한 값을 가질 수 있는 객체들을 모아서 GameObject 를 만들어본다. 방향성은, 유니티 엔진의 GameObject 스타일로 만들고, Transform 처리는 컴포넌트 형태로 만들어 붙여보는 순서로 진행. 한번에 몰아서 구현하던 Game 클래스에서, 물체마다 고유한 값을 가져야 하는 객체들을 모두 GameObject 로 옮겨서 구현. class GameObject { public: GameObject(ComPtr device, ComPtr deviceContext); ~GameObject() {} void Update(); void Render(shared_ptr pipeline); private: ComPtr _device; ..

DirectX 11 스터디 - 모듈화 (2), 렌더링을 책임질 Pipeline클래스 작성

앞에서 Geometry, VertexData 부터 Output Merger 의 BlendState까지 모두 모듈화 해서 DX COM객체를 캡슐화 했고, 이번엔 모듈화한 객체들을 가지고 Rendering Pipeline 을 실제 수행하는 객체를 작성해본다. 파이프라인에서 고유하게 존재하고 사용되어야 하는 모듈들과, 3D 물체마다 값/설정이 변경되어야 하는 모듈을 구분한다. 3D 물체마다 설정이 변경되어야 하는 객체들을 별도로 그룹화 해서 PipelineInfo 구조체로 묶어준다. 렌더링 파이프라인에 이 구조체를 기준으로 설정을 바꿔서 태워주면 새로운 물체를 그릴 수 있게 됨. PipelineInfo 는 아래 구성 요소가 포함됨. 여기서 ConstantBuffer는 3D 메시마다 필요할 수도, 필요하지 않을..

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

앞선 스터디 과정에서는 하나의 클래스에 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 로드, S..

행렬(Matrix) 스터디 - 실습 및 SimpleMath for DirectXMath

DirectX 행렬식 계산 편의를 위해 DirectXTK 의 DirectXMath 랩핑 모듈이 필요. SimpleMath.h/.cpp/.iln 파일들. 아래에서 다운로드 받을 수 있음. https://github.com/microsoft/DirectXTK/blob/3b3fd6cfc962c7ffdd03c311a6f6d6364ce96b0a/Inc/SimpleMath.inl SimpleMath.h 를 보면 아래와 같이랩핑한 DirectX 하위 클래스들을 확인할 수 있음. 여기서 Vector 시리즈와 Matrix 가 앞에서 학습한 행렬 수식과 관련된 클래스들. Matrix 메소드를 보면 앞에서 다뤘던 역행렬, 전치, Translation, Scale, Rotation 행렬 생성 시리즈들을 모두 볼 수 있음. 해..

[UE] 언리얼 엔진 DirectX 11 RHI 렌더링 분석 노트

DirectX SDK API 핵심 요소를 언리얼엔진의 어떤 모듈에서 호출하는지 구조 살펴보기. ... typedef ID3D11DeviceContext FD3D11DeviceContext; typedef ID3D11Device FD3D11Device; struct ID3D11DynamicRHI { ... } ... class FD3D11DynamicRHI : public ID3D11DynamicRHI, public IRHICommandContextPSOFallback { ... TRefCountPtr Direct3DDeviceIMContext; TRefCountPtr Direct3DDevice; TArray Viewports; ... } FD3D11DynamicRHI::InitD3DDevice() { ...

Unreal 엔진 2023.09.12

DirectX 11 스터디 - 렌더링 파이프라인 기초 핵심 정리

먼저 렌더링 파이프라인 기본 스테이지 순서 (중간중간 세부 스테이지는 스킵) IA > VS > RS > PS > OM Input-Assembler Stage Vertex Shader Stage Rasterizer Stage Pixel Shader Stage Output-Merger Stage 아래 3가지가 명령을 내리는 핵심. D3D11Device D3D11DeviceContext DXGISwapChain (DXGI (DirectX Graphics Infrastructure) : 기술 발전 속도가 느리거나 고전적인 요소들을 모아둔 기반 인터페이스.) Device 는 객체를 생성할 때 주로 사용. DevieContext 를 생성한 객체를 활용해서 명령을 내릴 때 주로 사용. SwapChain 은 전면/후면..

DirectX 11 스터디 - 래스터라이저 스테이트, 샘플 스테이트, 블렌드 스테이트

1. 래스터라이저 스테이트를 생성/설정하고 Render() 함수에서 전달해준다. ID3D11RasterizerState 를 생성하고, ~_DESC 에 설정값을 담아 생성한다. 그리고 Render() 함수에서 Pixel Shader 에 적용되도록 전달함. ComPtr _rasterizerState; void Game::CreateRasterizerState() { D3D11_RASTERIZER_DESC desc; ZeroMemory(&desc, sizeof(desc)); desc.FillMode = D3D11_FILL_SOLID; desc.CullMode = D3D11_CULL_BACK; desc.FrontCounterClockwise = false; // 시계방향/반시계방향 = Clockwise / Co..

DirectX 11 스터디 - 상수 버퍼 (Constant Buffer)

버텍스 데이터/매쉬 데이터를 건들지 않고, Shader 에 버퍼 데이터를 넘겨서 버텍스셰이더를 통해 변경되도록 처리해본다. 순서는 아래와 같다. 1. 상수버퍼 생성 2. DeviceContext 에 버퍼 매핑 3. 렌더 함수에서 버퍼 전달 아래는 수정한 코드 블럭들 // 멤버 선언 TransformData _transformData; ComPtr _constantBuffer; // 구조체 선언 struct TransformData { Vec3 offset; float dummy; // 16byte 로 정렬해야 하기 때문에 더미 멤버를 추가. }; // 버퍼 생성 void Game::CreateContantBuffer() { D3D11_BUFFER_DESC desc; ZeroMemory(&desc, siz..

DirectX 11 스터디 - 텍스쳐 UV맵핑 (ShaderResourceView)

이전 노트에서 인덱스버퍼까지 다룸. 2023.09.06 - [게임 개발 자료/게임 개발 스터디] - DirectX 11 스터디 노트 - 도형 만들어보기 (Create Geometry) + 인덱스 버퍼 + 버텍스 셰이더, 픽셀 셰이더 이번엔 Shader Resource View 를 생성해서 png 텍스쳐 파일을 로드하고 버텍스컬러 대신 uv 좌표를 입력해서 폴리곤 위에 텍스쳐를 띄워본다. 1. ShaderResourceVIew 생성 / 리소스 로드 2. 셰이더 수정 3. 랜더링 함수 호출 이 순서로 진행. 1. ShaderResourceVIew 생성 / 리소스 로드 ID3D11ShaderResourceView 생성. 이 때 텍스쳐 리소스도 같이 로드. // ComPtrPSSetShader(_pixelSha..

DirectX 11 스터디 노트 - 도형 만들어보기 (Create Geometry) + 인덱스 버퍼 + 버텍스 셰이더, 픽셀 셰이더

Vertex 구조체를 만들어 Vertex Data 를 구성하고, ID3D11Buffer 를 생성해서 ID3D11Device 의 CreateBuffer 함수로 VertexBuffer 를 만들어준다. void Game::CreateGeometry() { // VertexData { _vertices.resize(3); _vertices[0].position = Vec3(-0.5f, -0.5f, 0.f); _vertices[0].color = Color(1.f, 0.f, 0.f, 1.f); _vertices[1].position = Vec3(0.f, 0.5f, 0.f); _vertices[1].color = Color(0.f, 1.f, 0.f, 1.f); _vertices[2].position = Vec3(0..

728x90
반응형