1. Direct3D API Interface & Function
1.1 Vertex Shader
1.1.1 Vertex Shader HLSL Code
- 정점을 생성할 때 위치와 색상으로 생성하여 정점 셰이더의 매개변수가 4개
- 처음 두가지의 값은 입력 매개변수, 나머지 둘은 출력 매개변수
- HLSL에서는 참조나 포인터가 없으므로 구조체를 이용하거나 out이 지정된 출력 매개변수를 사용
struct Vertex { XMFLOAT3 Pos; XMFLOAT4 Color;};
void VS(float3 iPosL : POSITION, float4 iColor : COLOR,
out float4 oPosH : SV_POSITION, out float4 oColor : COLOR);
- 처음 두 입력 매개변수는 정점 셰이더의 입력 서명을 형성하며 커스텀 정점 구조체의 자료 멤버들에 대응
- 출력 매개변수 또한 존재, 정점 셰이더의 출력을 파이프라인의 다음 단계의 해당 입력에 대응시키는 역할
1.1.2 Constant Buffer
- 셰이더가 접근할 수 있는 다양한 자료를 저장하는 유연한 자료 블록
cbuffer cbPerObject { float 4x4 gWorldViewProj; };
- World Space 행렬은 물체마다 다르므로 위에서 생성한 World, View, Projection 행렬 또한 물체마다 달라야 함
- 여러 물체를 그리는 경우 그리기전 위의 변수를 적절히 갱신해야함
1.2 Pixel Shader
1.2.1 Pixel Shader
- Rasterizer 단계는 정점 셰이더가 공급한 정점 특성들을 삼각형의 픽셀들을 따라 보간한 결과를 픽셀 셰이더로 입력
- 각 정점이 아닌 각 픽셀 단편마다 실행하므로 주어진 입력으로 부터 픽셀 단편의 색상을 계산
- 픽셀 단편은 도중에 폐기되어 후면 버퍼까지 도달하지 못할 수 있음
- 깊이 값이 더 작은 다른 픽셀 파편에 의해 가려지거나 스텐실 판정 같은 이후의 파이프라인 판정과정에서 폐기
float4 PS(float4 posH : SV_POSITION, float4 color : COLOR) : SV_Target { return pin.Color; }
1.3 Render State
- 렌더링 파이프라인의 특정 측면의 구성에 쓰이는 관련 상태 집합으로 묶어 관리
1.3.1 Rasterizer State
- 파이프라인의 Rasterizer Stage를 구성하는 데 쓰이는 설정들을 묶은 상태 집합
typedef struct D3D11_RASTERIZER_DESC;
1.3.2 Blend State
- 혼합 연산을 구성하는 데 쓰이는 상태 집합
1.3.3 Depth Stencil State
- 깊이 판정과 스텐실 판정을 구성하는 데 쓰이는 상태 집합
'C++ Algorithm & Study > Game Math & DirectX 11' 카테고리의 다른 글
[Direct11] 11. EX App Program - Color Box (0) | 2023.06.14 |
---|---|
[Direct11] 10. Direct3D Effect Framework (0) | 2023.06.14 |
[Direct11] 8. Direct3D API Interface & Function #1 (0) | 2023.06.14 |
[Direct11] 7. Rendering Pipeline - Pixel Shader & Output Merger (PS & OM) (0) | 2023.06.13 |
[Direct11] 6. Rendering Pipeline - Tessellation & Rasterizer (TS & RS) (0) | 2023.06.13 |