일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 다이렉트X
- 코딩
- DirectX12
- DirectX
- C언어
- Direct Init
- CommandList
- engine
- Direct3D Init
- Input Assembler
- vertex
- 다중표본화
- 전처리문
- UE4
- GPU
- 세팅
- 프로그래밍
- C++
- RenderTargetView
- Direct3D
- View
- 다이렉트X 튜토리얼
- DirectXTK
- CPU
- 동기화
- swapchain
- 다이렉트 초기화
- c
- DESC
- 게임수학
- Today
- Total
목록Direct3D (5)
비타Cpp
GPU가 정점 배열에 접근하려면, 그 정점들을 버퍼라는 GPU 자원(ID3D12Resource)에 넣어 두어야 한다. 정점들을 저장하는 버퍼를 정점 버퍼(Vertex Buffer)라고 부른다. 버퍼는 텍스처보다 단순한 자원이다. 버퍼는 다차원이 아니며, 밉맵이나 필터, 다중 표본화 기능이 없다. 응용 프로그램에서 정점 같은 자료 원소들의 배열을 GPU에 제공해야 할 때에는 항상 버퍼를 사용한다. 정점 버퍼를 생성하려면 D3D12_RESOURCE_DESC를 채우고 ID3D12Device::CreateCommittedResource 메서드를 호출해서 ID3D12Resource객체를 생성한다. Direct3D 12는 D3D12_RESOURCE_DESC를 상속해서 편의용 생성자들과 메서들을 추가한 C++ 래퍼 ..
Direct3D에서는 정점(Vertex)에 공간적인 좌표값과 다른 추가적인 데이터를 부여할 수 있다. 원하는 데이터(특성)를 커스텀 정점 형식(Vertex Format)을 만들려면 우선 그러한 자료를 담을 구조체를 정의해야 한다. 다음은 서로 다른 두 가지 정점 형식의 예이다. Vertex1 구조체 struct Vertex1 { XMFLOAT3 Pos; XMFLOAT4 Color; } Vertex2 구조체 struct Vectex2 { XMFLOAT3 Pos; XMFLOAT3 Normal; XMFLOAT2 Tex0; XMFLOAT2 Tex1; } 정점 구조체를 정의한 다음에는 정점 구조체의 각 필드, 즉 정점의 각 성분으로 무엇을 해야 하는지를 Direct3D에게 알려 주어야 한다. 그러한 정보를 Dir..
지금 까지 만들어진 응용 프로그램 프레임워크를 이용하여 간단한 예제프로그램을 만들어 보자. 이 프로그램의 주된 기능은 부모 클래스인 D3DApp이 대부분 담당하기 때문에 이 예제만의 특별한 코드는 거의 없다. #include "../../_Common/d3dApp.h" class InitDirect3DApp : public D3DApp { public: InitDirect3DApp(HINSTANCE hInstance); ~InitDirect3DApp(); virtual bool Initialize()override; private: virtual void OnResize()override; virtual void Update(const GameTimer& gt)override; virtual void D..
모니터의 픽셀들이 무한히 작지는 않기 때문에, 모니터에 임의의 선을 완벽하게 표현할 수는 없다. 흔히 '계단현상'이라고 하는 앨리어싱(Aliasing) 효과가 아래의 그림이다. 선을 픽셀들의 배열로 '근사'하다 보면 이런 현상이 생긴다. 삼각형의 변에서도 이와 비슷한 앨리어싱 효과가 나타난다. 이러한 계단현상을 바로잡을 수 있는 기법이 안티앨리어싱(Anti-Aliasing)기법이다. 이러한 기법의 하나가 초과 표본화(Supersampling)이다. 초과 표본화에서는 후면 버퍼와 깊이 버퍼를 화면 해상도보다 4배(가로, 세로 두 배씩) 크게 잡고, 3차원 장면을 4배 크기의 해상도에서 후면 버퍼에 렌더링 한다. 이미지를 화면에 제시할 때가 되면 후면 버퍼를 원래 크기의 버퍼로 환원(Resolving)한다...
렌더링 과정에서 GPU는 자원들에 자료를 기록하거나 자원들에서 자료를 읽어 들인다. Draw() 명령을 호출하기 전에, 먼저 참조할 자원들을 렌더링 파이프라인에 묶어야(Bind) 한다. 이를 가리켜 자원을 파이프라인에 "연결한다(link)" 또는 "바인딩한다"라고 말한다. 하지만 GPU자원들이 파이프 라인에 직접 묶이는 것은 아니다. 실제로 파이프라인에 묶이는 것은 해당 자원을 참조하는 서술자(Descriptor) 객체이다. 서술자 객체는자원을 GPU에게 서술해주는 경량의 자료구조라고 할 수 있다. 이는 하나의 간접층(level of indirection)이다. 이처럼 간접층을 두는 이유는, GPU자원이라는 것이 사실상 범용적이므로, 같은 자원을 렌더링 파이프라인의 다른 단계(Stage) 에서 사용할수 ..