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

[Direct11] 24. Direct3D Geometry Shader

GameChoi 2023. 6. 20. 17:40

1. Direct3D

1.1 Geometry Shader

1.1.1 Geometry Shader

 - 테셀레이션 단계를 사용하지 않는다고 할 때, Vertex & Pixel Shader 단계 사이에 있는 생략 가능 단계

   - 정점 셰이더는 개별 정점들을 입력받는 반면 기하 셰이더는 온전한 기본 도형을 입력 받음

     - 한 삼각형의 정점 세 개를 입력받아 기본도형들의 목록을 출력, 기하구조를 새로 생성 및 파괴 가능

       - 하나의 입력 기본도형을 여러 개의 다른 기본도형들로 확장, 주어진 조건에 따라 특정 기본 도형 폐기

         - 하나의 점으로부터 사각형으로 확장

 - 기하 셰이더의 프로그램을 작성할 때 기하 셰이더의 한 실행에서 출력할 정점들의 최대 개수를 지정

   - 최대 정점 개수 특성을 지정, 숫자의 의미는 한 번의 실행에서 출력할 최대 정점 개수

[maxvertexcount(4)]

   - 두 종류의 매개변수를 받는데 하나는 입력 매개변수, 하나는 출력 매개변수

     - 입력 매개변수는 항상 기본도형을 정의하는 정점들의 배열, 기하 셰이더가 받는 기본도형의 키워드를 붙여야 함

point, line, triangle, lineadj, triangleadj

     - 출력 매개변수는 항상 스트림 형식, 기하 셰이더가 출력하는 기본도형을 정의하는 정점들의 목록을 담음

     - 출력 스트림 목록에 정점을 추가할 때 함수 적용

       - 스트림 형식은 템플릿 형식으로 출력 정점의 정점 형식을 지정

void StreamOutputObject<OutputVertexType>::Append(OutputVertexType v);
PointStream<OutputVertexType>, LineStream<OutputVertexType>, TriangleStream<OutputVertexType>

 - 위의 모든 방식을 참조하여 기하 셰이더를 생성한 값은 밑의 코드 참조

[maxvertexcount (4)] void GS(line VertexOut gin[2], inout TriangleStream<GeoOut> triStream);