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