1. Rendering PipeLine
1.1 Rendering PipeLine
1.1.1 Input Assembler
- 메모리에서 기하 자료를 읽어 기하학적 기본도형을 조립
- Vertex
- Direct3D의 정점은 본질적으로 공간적 위치 이외의 정보도 담고, 좀 더 복잡한 렌더링 효과를 낼 수 있음
- 정점들은 정점 버퍼를 통해 렌더링 파이프라인에 묶임
- 연속적인 메모리에 저장하는 자료구조, 어떤 식으로 조합해서 기본 도형을 형성할 것인지 말하지 않음
1.1.1.1 Primitive Topology
- 기본 도형을 형성하는 방식을 DX3D에게 알려주는 수단
- 기본 도형 위상 구조를 지정하는 함수 & 다양한 기본 도형 위상 구조들을 정의한 열거형
void ID3D11DeviceContext::IASetPrimitiveTopology(D3D11_PRIMITIVE_T0P0LᄋGY Topology);
typedef enum D3D11_PRIMITIVE_T0P0L0GY;
- 한 번 기본도형 위상구조를 설정하면 다음 호출이 있을 때 까지 모든 그리기 호출에서 위상 구조가 적용
1.1.1.2 Index
- 사각형 하나와 팔각형 하나를 삼각형 목록을 이용하여 구축하기 위해 정점 배열을 사용
Vertex quad[6] = { vO, vl, v2, vO, v2, v3, };
Vertex octagon[24] = { vO, vl, v2,
vO, v2, v3,
vO, v3, v4,
vO, v4, v5,
vO, v5, v6,
vO, v6, v7,
vO, v7, v8,
vO, v8, vl };
- 3차원 물체를 형성하는 삼각형들은 다수의 정점들을 공유
- 2개가 중복되는 것은 큰 문제X, 하지만 팔각형의 경우는 문제가 심각
- 팔각형은 모든 삼각형이 중심 중점을 공유하므로 모형이 세밀하고 복잡할수록 중복되는 정점들도 많아짐
- 정점들의 중복이 바람직하지 않는 이유
- 메모리 요구량이 증가 & 그래픽 하드웨어의 처리량이 증가
- 삼각형 목록에서 중복 정점들을 제거하는 방법을 고안하여 생각해낸 해법은 Index를 사용
- 고유한 정점들로 정점 목록을 만들어 어떤 정점들을 어떤 순서로 사용해서 삼각형을 형성하는지 그 정점들의 색인들을 적절히 나열함으로써 지정
Vertex v [4] = {v0, vl, v2, v3}; UINT indexList[6] = {0, 1, 2, /* */ 0, 2, 3};
- 그래픽 카드는 정점 목록의 고유한 정점들을 처리한 후 색인 목록을 이용하여 정점들을 조합해 삼각형을 형성
- 정점들에 중복이 없어진 대신 색인들에 중복이 생겼지만 큰 문제X
- 색인은 그냥 정수이므로 완전한 정점 구조체보다 적은 양의 메모리를 차지
- 정점 캐시 순서가 좋은 경우 그래픽 하드웨어는 중복된 정점들을 처리하지 않아도 됨
'C++ Algorithm & Study > Game Math & DirectX 11' 카테고리의 다른 글
[Direct11] 6. Rendering Pipeline - Tessellation & Rasterizer (TS & RS) (0) | 2023.06.13 |
---|---|
[Direct11] 5. Rendering Pipeline - Vertex Shader (VS) (0) | 2023.06.13 |
[Direct11] 3. Direct3D EX Application Framework (0) | 2023.06.12 |
[Direct11] 2. Direct3D initialization (0) | 2023.06.12 |
[Direct11] 1. Direct3D Basic Knowledge (0) | 2023.06.12 |