1. Rendering Pipeline
1.1 Vertex Shader
- 입력 조립기 단계에서 기본 도형들을 조립한 후 정점들이 정점 셰이더 단계로 입력
- 정점 하나를 받아 정점 하나를 출력하는 함수, 화면에 그려질 모든 정점은 정점 셰이더 단계를 거침
- 프로그래머가 구현하여 GPU로 제출, 그 함수는 각 정점에 대해 GPU에서 실행되므로 아주 빠름
- 변환, 조명, 변위 매핑 등 수많은 특수 효과를 정점 셰이더에서 수행 가능
- 입력 정점 자료, Texture, 변환 행렬, 장면 광원 정보 등 GPU 메모리에 담긴 다른 자료에도 접근 가능
1.1.1 Local Space & World Space
- 물체의 기하구조를 장면 전역의 좌표계를 기준으로 직접 구축하는 것이 아님
- 물체 자신의 Local Space를 기준으로 구축하면 좌표계 원점을 중심 가까이 둘 수 있고 좌표 축들을 물체에 맞게 정렬
- 물체 자신의 공간에서 3차원 모형의 정점들을 모두 정의했다면 세계 공간의 관계를 정의
- World Space 기준으로 한 Local Space 원점과 축들의 위치 및 방향 지정, 그에 해당하는 좌표 변경 변환 수행
1.1.2 Camera(View) Space
- 최종적으로 화면에 표시되는 것은 장면의 2차원 이미지이므로 장면에 가상의 카메라를 배치
- 세계에서 관찰자가 볼 수 있는 영역,, 세계에서 2차원 이미지를 생성해야 하는 영역을 결정
- 카메라에 Local Space 영역을 생성하면 좌표계가 Camera Space
- 밑의 함수를 통해 World Space의 시야 행렬을 계산 & 카메라의 Local Space 영역에서 역행렬을 통해 구할 수 있음
XMMATRIX XMMatrixLookAtLH (
FXMVECTOR EyePosition, // 입력카메라위치
FXMVECTOR FocusPosition, // 입력 대상점
FXMVECTOR UpDirection) ; // 입력 세계 상향 벡터
1.1.3 투영과 동차 절단 공간
- 카메라가 바라보는 공간 영역 (절두체 - 끝이 잘린 사각뿔)
- 시야 절두체 안의 3차원 기하구조를 2차원 투영 창으로 투영
- 물체의 3차원 깊이가 증가함에 따라 그 투영의 크기가 줄어드는 형상이 나타남 (Perspective Projection)
- XMA Math 라이브러리를 통해 원근 투영 행렬을 구축해 주는 함수를 제공
XMMATRIX XMMatrixPerspectiveFovLH (
FLOAT FovAngleY, // 수직 시이각 ( 라디안 단위)
FLOAT AspectRatio, // 비 = 너비 / 높이
FLOAT NearZ, // 가까운평면까지의 거리
FLOAT FarZ) ; // 먼 평면까지의 거리
- 응용 프로그램 창의 너비와 높이를 이용하여 종횡비를 계산하고 수직 시야각, 평면의 거리를 구해 값을 넣음
XMMATRIX P = XMMatrixPerspectiveFovLH(0.25f*MathX::Pi, AspectRatio(), l.Of, 1000.Of);
'C++ Algorithm & Study > Game Math & DirectX 11' 카테고리의 다른 글
[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 |
[Direct11] 4. Rendering Pipeline - Input Assembler (IA) (0) | 2023.06.13 |
[Direct11] 3. Direct3D EX Application Framework (0) | 2023.06.12 |
[Direct11] 2. Direct3D initialization (0) | 2023.06.12 |