Direct3D 첫번째 요약

2022. 9. 25. 23:36Public/GraphicsAPI

 

  1. Direct3D는 프로그래머와 그래픽 하드웨어 사이의 중재자라고 할 수 있다. 예를 들어 프로그래머는 Direct3D의 함수를 호출함으로써 자원 뷰를 하드웨어 렌더링 파이프라인에 묶거나 렌더링 파이프라인의 출력을 설정하거나 3차원 기하구조를 그린다.

  2. Direct3D 11의 경우, Direct3D 11 대응 그래픽 장치는 반드시 Direct3D 11의 기능 집합 전체를 지원해야 한다.(몇몇은 제외)

  3. COM(Component Object Model)은 DirectX의 프로그래밍 언어 독립성과 하위 호환성을 가능하게 하는 기술이다. Direct3D 프로그래머가 COM의 세부사항과 작동 방식을 구체적으로 알 필요는 없다. COM 인터페이스를 휙득하고 해제하는 방법만 알면 된다.

  4. 1차원 텍스처는 자료 원소들의 1차원 배열과 비슷하고, 2차원 텍스처는 자료 원소들의 2차원 배열과 비슷하고, 3차원 텍스처는 자료 원소들의 3차원 배열과 비스사다. 텍스처의 원소들의 형식은 반드시 DXGI_FORMAT 열거형의 한 멤버에 해당하는 것이어야 한다. 일반적으로 텍스처는 이미지 자료를 담지만, 깊이 정보(깊이 버퍼의 경우) 같은 다른 자료를 담는 것도 가능하다. GPU는 텍스처에 대해 필터링이라든가 다중 표본 추출 같은 특별한 연산을 수행할 수 있다.

  5. Direct3D에서 자원은 파이프라인에 직접 묶이지 않는다. 대신 자원에 대한 뷰가 파이프라인에 묶인다. 하나의 자원에 대해 여러 개의 뷰를 만들 수 있으며, 이를 통해서 하나의 자원을 파이프라인의 서로 다른 단계들에 묶는 것이 가능하다. 무형식으로 자원을 생섷안 경우에는 뷰를 생성할 때 자원의 구체적인 형식을 반드시 지정해야 한다.

  6. ID3D11Device 인터페이스와 ID3D11DeviceContext 인터페이스는 물리적인 그래픽 장치 하드웨어에 대한 소프트웨어적인 제어기라고 할 수 있다. 즉, 우리는 이 인터페이스들을 통해서 하드웨어와 상호작용하면서 하드웨어에 명령을 내린다. ID3D11Device인터페이스는 기능 지원 여부의 점검과 자원 할당에 쓰인다. ID3D11DeviceContext 인터페이스는 렌더 상태를 설정하거나, 자원을 렌더링 파이프라인에 묶거나, 렌더링 명령을 내리는데 쓰인다.

  7. 애니메이션이 껌벅거리지 않게 하는 최선의 방법은 애니메이션의 한 프레임 전체를 후면 버퍼라고 부르는 화면 밖 텍스처에 그리고, 그 후면 버퍼를 하나의 완성된 프레임으로서 화면에 표시하는 것이다. 이렇게 하면 프레임이 그려지는 도중의 모습을 사용자가 보게 되는 일이 없다. 후면 버퍼를 화면에 표시한 후에는 점녀 버퍼(화면에 표시된 모습을 담은)와 후면 버퍼의 역할을 맞바꾼다. 즉, 후면 버퍼가 전면 버퍼가 되고 저면 버퍼는 애니메이션의 다음 프레임을 위한 후면 버퍼가 되는 것이다. 전면 버퍼와 후면 버퍼는 하나의 교환 사슬을 형성하는데, 프로그램에서는 이 교환 사슬을 IDXGISwapChain 인터페이스로 나타낸다. 후면 버퍼와 전면 버퍼의 역할을 교환하는 것을 '제시(Present)'라고 부른다. 그리고 이처럼 두 개의 버퍼(전면과 후면)을 사용하는 기법을 이중 버퍼링이라고 한다.

  8. 장면 물체들이 불투명하다고 할 때, 카메라에 가장 가까운 점은 그 뒤의 모든 점을 가린다. 깊이 버퍼링은 장면에서 카메라에 가장 가까운 점들을 결정하는 기법이다. 깊이 버퍼링을 이용하면 장면 물체들을 그리는 순서를 신경쓰지 않아도 된다.

  9. 성능 카운터라고도 하는 성능 타이머는 프레임 간 경과 시간 같은 작은 시간 차이를 측정하는 데 필요한 정확한 시간 측정 능력을 제공하는 고해상도 타이머이다. 성능 타이머는 시간을 개수 단위로 측정한다. QueryPerformanceFrequency 함수는 성능 타이머의 초당 개수를 알려준다. 성능 타이머의 현재 시간 값(개수 단위)은 QueryPerformanceCounter 함수로 얻는다.

  10. 평군 초당 프레임 수 (FPS)는 일정한 시간 구간 △t 동안 처리된 프레임의 수를 이용해서 계산한다. 시간 구간 △t 동안 처리된 프레임이 n개라면, 그 시간 구간 동안의 평균 초당 프레임은 fps = n /△t 이다. 그런데 FPS로 표현된 프레임률은 성능에 대한 오해를 불러 일으킬 수 있다. FPS보다는, 한 프레임을 처리하는 데 걸린 시간이 더 유익하다. 한 프레임을 처리하는 데 걸린 초 단위 평균 시간은 FPS의 역(즉 1/fps)이다.

  11. 디버그 모드 빌드를 위해서는 Direct3D 장치를 생성할 때 D3D11_DEVICE_DEBUG 플래그를 지정해서 디버그층(debug layer)을 활성화시키는 것이 좋다. 이 디버그 플래그를 지정하면 Direct3D는 디버그 메시지들을 VC++ 출력 창에 보낸다. 또한 디버그 모드에서는 D3DX 라이브러리(즉 d3dx11d.lib)의 디버그 버전을 사용할 것.

 

참고서적 : http://www.yes24.com/Product/Goods/11129592

'Public > GraphicsAPI' 카테고리의 다른 글

[DX12]혼합(Blend) 및 예제  (0) 2023.08.26
Direct3D 응용 프로그램의 디버깅  (0) 2022.09.25
Direct3D 초기화 예제  (0) 2022.09.25
DX11 Tutorial02 코드 설명  (0) 2022.08.22
광원  (0) 2022.08.15