서적 정리/DirectX11을 이용한 3D 게임 프로그래밍 입문
56.Direct3D의 그리기 연산 요약
민돌이2
2022. 2. 21. 17:18
- Direct3D의 정점은 공간적 위치 이외의 추가적인 자료를 가질 수 있다. 사용자가 원하는 커스텀 정점 형식을 만들려면 원하는 자료가 담긴 구조체를 정의해야한다. 다음으로 구조체의 각 필드가 어떤 용도인지 Direct3D에게 알려줘야한다.
- GPU가 정점 또는 인덱스 배열에 접근할 수 있으려면 배열의 정점 또는 인덱스들을 버퍼에 담아야 한다. Direct3D에서 버퍼는 ID3D11Buffer 인터페이스로 대표된다.
- 정점 셰이더는 정점 하나를 받아서 정점 하나를 출력하고, GPU에서 실행된다. 후면 버퍼에 그려지는 모든 정점은 정점 셰이더를 거친다.
- 상수 버퍼는 C++ 응용 프로그램 코드와 셰이더 모두 접근할 수 있는 다양한 자료를 저장할 수 있다. C++ 응용 프로그램은 셰이더가 사용하느 상수 버퍼의 값들을 갱신함으로써 셰이더에게 특정한 정보를 전달한다. 상수 버퍼의 변수들의 갱신 빈도에 따라 상수 버퍼에 담는 것이 효율적이다.
- 픽셀 셰이더는 보관된 정점 자료를 받아서 색상 값 하나를 출력하고, GPU에서 실행된다. 픽셀 단편이 픽셀 셰이더에 도달하기 전에 파이프라인에 의해 기각될 수 있다.
- 렌더 상태는 기하구조의 렌더링 방식에 영향을 주는 장치의 상태 집합이다. 한 번 설정된 렌더 상태는 다시 설정되기 전까지 계속 유지된다. Direct3D의 렌더 상태는 크게 세 종류로, 래스터화기 상태(ID3D11RasterizerState), 혼합 상태(ID3D11BlendState), 깊이·스텐실 상태(ID3D11DepthStencilState)이다.
- Direct3D의 효과는 렌더링 기법을 캡슐화한 개념이다. 렌더링 기법은 3차원 기하구조를 렌더링하는 구체적인 방식을 서술한 것이고, 적어도 하나의 렌더링 패스로 구성된다. 기하구조를 여러 개의 패스로 여러 번 렌더링 하는 것을 다중 패스 기법이라고 한다. 하나의 패스는 하나의 정점 셰이더와 픽셀 셰이더, 렌더 상태들로 구성되며, 기하 셰이더나 테셀레시연 관련 셰이더가 포함될 수도 있다.
- 동적 버퍼는 버퍼의 내용을 실행시점에서 자주 갱신해야 할 때 사용을 고려할 수 있다. 동적 버퍼는 반드시 용도를 D3D11_USAGE_DYNAMIC으로, CPU 접근 플래그를 D3D11_CPU_ACCESS_WRITE로 설정해서 생성해야 한다. 버퍼를 갱신할 때는 ID3D11DeviceContext::Map과 ID3D11DeviceContext::Unmap 메소드를 사용한다.
728x90