D3D 기초

2015. 9. 6. 22:26프로그래밍/3D

728x90
728x90

COM(Component Object Model)

DX의 프로그래밍 언어 독립성과 하위 호환성을 가능하게 하는 기술

COM의 세부 사항은 프로그래머에게 드러나지 않는다.

프로그래머가 알아야 할 것은 필요한 COM 인터페이스로부터 함수 또는 다른 인터페이스를 이용하는 방법만 알면된다.


- C++의 new로 생성하는 것이 아니다.

- delete가 아닌 Release 메서드를 호출해 주어야 한다.

- 모든 COM 인터페이스는 IUnknown이라는 COM 인터페이스의 기능을 상속받는다.(이 인터페이스가 Release 제공)


텍스처와 자료

1차원 텍스처는 자료 원소들의 1차원 배열과 비슷하다.

2차원 텍스처는 자료 원소들의 2차원 배열, 3차원 텍스처는 3차원 배열과 비슷하다.


자원

D3D에서 자원은 파이프라인에 직접 묶이지 않는다.

대신 자원에 대한 뷰가 파이프라인에 묶인다. 하나의 자원에 대해 여러 개의 뷰를 만들 수 있다.

하나의 자원을 파이프라인의 서로 다른 단계들에 묶는 것이 가능하다.


교환 사슬과 페이지 전환

애니메이션의 플에임 전체를 후면 버퍼에 그린다.(프레임이 그려지는 과정을 볼 필요가 없다.)


현재 모니터에 표시되는 이미지 자료를 전면 버퍼(front buffer)

뒤에 있는 것이 후면 버퍼(back buffer)


실제 내용을 교환하는 것이 아닌 버퍼가 가리키는 포인터만 교환하는 것.


교환사슬(swap chain)

D3D에서 하나의 교환 사슬은 IDXGISwapChain이라는 인터페이스로 대표된다.

버퍼 크기를 변경하는 메서드, 버퍼의 제시를 위한 메서드가 제공된다.


두 개 버퍼(전면과 후면)를 사용하는 것을 이중 버퍼링이라고 부른다.


깊이 버퍼링

깊이 버퍼는 이미지 자료를 담지 않는 텍스처의 한 예이다. 각 픽셀의 깊이 정보를 담는다.

픽셀의 길이 0.0 ~ 1.0까지 값으로 관찰자와의 거리를 나타낸다.

후면 버퍼의 픽셀들과 일대일로 대응된다.


D3D는 깊이 버퍼링 or Z-버퍼링 기법을 사용한다.


멀티샘플링

계단현상(aliasing)이 있다. 삼각형의 변들에서도 비슷한 현상이 생긴다.

에얼리어싱 제거(antialiasing)을 위한 기법이 존재한다.


그 중 하나가 수퍼샘플링.

- 후면 버퍼와 깊이 버퍼를 화면 해상도보다 4배(가로, 세로 두 배) 크게 잡는다.

- 이미지를 화면에 제시할 때 후면 버퍼를 원래 크기의 버퍼로 환원(resolving)한다.

- 이 환원 공정을 다운 샘플링이라고도 부른다.


D3D에선 멀티샘플링이라는 절충적인 앨리어싱 제거 기법을 지원한다.

- 일부 계산 결과를 부분픽셀들 사이에서 공유하기 때문에 수퍼샘플링보다 비용이 적다.

728x90
반응형

'프로그래밍 > 3D' 카테고리의 다른 글

eigen value, eigen vector  (0) 2015.09.11
유니티 프로젝트 두 개 나오게 하기(for mac)  (0) 2015.08.02
유니티 웹 빌드해서 블로그에 올리기  (2) 2015.07.29
유니티 숏컷  (0) 2015.07.23
Mono Behaviour  (0) 2015.07.18
스크립트 라이프 사이클  (0) 2015.07.13
DX 그래픽스 파이프라인  (0) 2015.07.11