C++ Algorithm & Study/Game Math & DirectX 11

[Direct11] 9. Direct3D API Interface & Function #2

GameChoi 2023. 6. 14. 17:49

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

 - 깊이 판정과 스텐실 판정을 구성하는 데 쓰이는 상태 집합