[DirectX12] #Part 2 - Direct 3D 기초 "DirectX12를 이용한 3D 게임 프로그래밍 입문" 서적의 Part 2, "Direct3D의 기초"에 해당하는 내용입니다. 현재, 게임 개발에 입문하여 기초지식을 습득하여 기록하기 위함이며, 개념 이해와 예제코드 작성을 진행. 명령 대기열(Command Queue)과 명령 목록(Command List) GPU에는 명령 대기열이 있습니다. CPU는 그리기 명령어들이 담긴 명령 목록을 Direct3D API를 통해 그 대기열에 제출합니다. 하지만, CPU가 명령들을 명령 대기열에 제출했다고 해도, GPU는 그 명령들을 즉시 실행하지 않습니다! 여기서 우리가 알아야 할 점은 게임 같은 고성능 응용 프로그램의 목표는 가용 하드웨어 자원을 최대한..
게임개발
[DirectX12] #Part 2 - Direct 3D 기초 "DirectX12를 이용한 3D 게임 프로그래밍 입문" 서적의 Part 2, "Direct3D의 기초"에 해당하는 내용입니다. 현재, 게임 개발에 입문하여 기초지식을 습득하여 기록하기 위함이며, 개념 이해와 예제코드 작성을 진행. 상주성? Direct3D 12에서 응용 프로그램 자원을 GPU 메모리에 올리고, 또 내리며 자원의 상주성을 관리합니다. 즉, 여기서 "상주성"이란 응용 프로그램 자원이 GPU 메모리에 들어있는지의 여부를 뜻합니다. 메모리를 다루는 만큼, 상주성 관리의 요점은 응용 프로그램이 사용하는 GPU 메모리의 양을 최소화하는 것입니다. 예를들면, 야외의 '숲'과 '동굴'을 배경으로 한 게임에서, '동굴'에 들어간 사용자는 '..
[DirectX12] #Part 2 - Direct 3D 기초 "DirectX12를 이용한 3D 게임 프로그래밍 입문" 서적의 Part 2, "Direct3D의 기초"에 해당하는 내용입니다. 현재, 게임 개발에 입문하여 기초지식을 습득하여 기록하기 위함이며, 개념 이해와 예제코드 작성을 진행. ID3D12Device::CheckFeatureSupport 메서드 HRESULT ID3D12Device::CheckFeatureSupport ( D3D12_FEATURE Feature; void *pFeatureSupportData; UINT FeatureSupportDataSize ); 1. Feature: CheckFeatureSupport를 통해 지원 여부를 점검할 기능들의 종류 (a) D3D12_FEATU..
[DirectX12] #Part 2 - Direct 3D 기초 "DirectX12를 이용한 3D 게임 프로그래밍 입문" 서적의 Part 2, "Direct3D의 기초"에 해당하는 내용입니다. 현재, 게임 개발에 입문하여 기초지식을 습득하여 기록하기 위함이며, 개념 이해와 예제코드 작성을 진행. DXGI? DirectX Graphics Infrastructure는 여러 그래픽 API들에 공통인 그래픽 관련 작업들이 존재하는 API입니다. 예를 들면, 화면 모드 전환, 디스플레이 어댑터나 모니터, 지원되는 디스플레이 모드 같은 그래픽 시스템 정보의 열거 등의 기능은 DXGI가 제공합니다. DXGI의 핵심 인터페이스 중 하나로 IDXGIFactory 인터페이스가 있습니다. 이 인터페이스는 IDXGISwapCh..
[DirectX12] #Part 2 - Direct 3D 기초 "DirectX12를 이용한 3D 게임 프로그래밍 입문" 서적의 Part 2, "Direct3D의 기초"에 해당하는 내용입니다. 현재, 게임 개발에 입문하여 기초지식을 습득하여 기록하기 위함이며, 개념 이해와 예제코드 작성을 진행. 엘리어싱 효과 모니터의 해상도를 결정하는 픽셀들은 무한히 작지 않습니다, 따라서 모니터 화면에 임의의 선을 끊김 혹은 계단 현상없이 출력하는 것은 불가능합니다. 선을 픽셀 배열들로 근사하다 보면 생기는 현상이죠. 위 그림과 같이 삼각형 변에서도 이와 비슷한 엘리어싱 효과가 나타납니다. 1. 초과표본화(Supersampling) 단순히, 모니터의 해상도를 키워, 픽셀의 크기를 줄이면 해결할 수 있는 문제입니다. 하지..
[DirectX12] #Part 2 - Direct 3D 기초 "DirectX12를 이용한 3D 게임 프로그래밍 입문" 서적의 Part 2, "Direct3D의 기초"에 해당하는 내용입니다. 현재, 게임 개발에 입문하여 기초지식을 습득하여 기록하기 위함이며, 개념 이해와 예제코드 작성을 진행. "자원"과 자원을 참조하는 "서술자" 렌더링 과정에서 GPU는 자원들에 자료를 기록하거나, 자원들로부터 자료를 읽어 들인다. 그리기 명령을 제출하기 전에, 먼저 해당 그리기 호출이 참조할 자원들을 렌더링 파이프라인에 묶어야 합니다. 이를 Binding이라고 표현합니다. 하지만, 자원들이 렌더링 파이프라인에 직접 묶이지 않고, 해당 자원을 참조하는 서술자 객체가 바인딩 됩니다. 서술자 객체는 GPU에게 자신이 참조하..
[DirectX12] #Part 2 - Direct 3D 기초 "DirectX12를 이용한 3D 게임 프로그래밍 입문" 서적의 Part 2, "Direct3D의 기초"에 해당하는 내용입니다. 현재, 게임 개발에 입문하여 기초지식을 습득하여 기록하기 위함이며, 개념 이해와 예제코드 작성을 진행. 2.4 교환 사슬 (Swap Chain) 에니메이션 구현 중 프레임과 프레임 사이에 끊김 현상을 방지하기위해, 이중 버퍼링(Double Buffering)을 사용합니다. 먼저, 한 프레임 전체를 화면 바깥의 텍스처, 즉 후면 버퍼에 그립니다. 그리고, 후면 버퍼에 저장된 하나의 프레임을 화면에 제시함으로써, 사용자에게 오직 완성된 프레임만 보여주어, 끊김 현상을 방지할 수 있습니다. 이때, 우리는 2개의 텍스처가 ..
[DirectX12] #Part 2 - Direct 3D 기초 "DirectX12를 이용한 3D 게임 프로그래밍 입문" 서적의 Part 2, "Direct3D의 기초"에 해당하는 내용입니다. 현재, 게임 개발에 입문하여 기초지식을 습득하여 기록하기 위함이며, 개념 이해와 예제코드 작성을 진행. 2.3 텍스처 형식 기본적으로 2차원 텍스처는 자료 원소들을 담는 2차원 행렬입니다. 2차원 텍스처는 2차원 이미지를 담고 있으며, 각 원소는 해당 이미지의 픽셀 하나의 색상 정보를 갖는다. 단순히 2차원 이미지의 픽셀 정보를 담는것보다 훨씬 범용적으로 사용됩니다. 단순 배열로 취급할 수 없습니다. 그렇다고, 아무 자료나 담을 수 있는것도 아니죠. Texture에는 특정 형식의 자료 원소들만 담고, 이는 DXGI_..
[DirectX12] #Part 2 - Direct 3D 기초 "DirectX12를 이용한 3D 게임 프로그래밍 입문" 서적의 Part 2, "Direct3D의 기초"에 해당하는 내용입니다. 현재, 게임 개발에 입문하여 기초지식을 습득하여 기록하기 위함이며, 개념 이해와 예제코드 작성을 진행. 2.1 - 기본 지식 D3D12(Direct 3D 12)는 Low-level에 사용되는 그래픽 API로, 응용 프로그램에서 GPU를 제어하고 프로그래밍하는데 사용됩니다. COM(Component Object Model), COM 객체 DirectX의 프로그래밍 언어의 독립성과 하위호환성을 가능케하는 기술이다. 책에서 설명하는 COM은 우리가 아주 잘 알고있는 C++의 클래스로 취급해도 무방하다. C++의 동적 메모..