Direct3D
| 개발자 | 마이크로소프트 |
|---|---|
| 발표일 | 1996년 6월 2일 |
| 안정화 버전 | 12.0 Beta 3
/ 2015년 1월 13일 |
| 저장소 |
|
| 엔진 | |
| 운영 체제 | 윈도우 |
| 플랫폼 | x86, ARM |
| 종류 | 3차원 그래픽스 API |
| 라이선스 | 사유 |
| 상태 | 지원 중 |
| 웹사이트 | msdn |
다이렉트3D(영어: Direct3D)는 마이크로소프트의 DirectX API에서 3차원 그래픽스 연산과 출력을 담당하는 부분이다. 마이크로소프트의 윈도우 운영 체제(윈도우 95 이상)에서만 작동하며, 엑스박스와 엑스박스 360 게임 콘솔의 그래픽 API로 사용되고 있다. 다이렉트3D와 비슷한 역할을 하는 API로는 OpenGL이 있으며 역할은 같지만 각자가 서로 다른 장단점을 가지고 있다.
역사
1992년 렌더모픽스(RenderMorphics)라는 회사에서 리얼리티 랩(Reality Lab)이라는 3차원 그래픽스 API를 만들기 시작했다. 1995년 2월에 마이크로소프트는 윈도우 95에 쓰일 3차원 그래픽스 API를 위하여 렌더모픽스 사를 인수했고, DirectX의 2.0 버전에서 처음 다이렉트3D가 도입되었다.
당시의 Direct3D는 하드웨어 제조사들이 지원하기 쉽도록 "실행 버퍼" 모델을 사용하고 있었는데 이는 프로그래머들에게 많은 불편을 야기했다. 다이렉트3D 5.0 버전에서는 DirectPrimitive API를 도입하여 실행 버퍼 모델을 대체하였다.
Direct3D 6.0 버전에서는 당시 최신 하드웨어를 지원할 수 있도록 많은 기능이 추가되었다. x86, SSE, 3DNow를 위해 지오메트리 파이프라인이 최적화되었고, 간단한 텍스처 관리 기능이 추가되었으며, 범프 매핑 등과 같은 고급 그래픽 효과를 사용할 수 있게 되었다.
Direct3D 7.0에서는 .dds 텍스처 파일 포맷이 도입되었으며, 6.0 버전에 추가되었던 기능들이 CPU가 동작했던 것을 그래픽 하드웨어가 맡아주기 위한 하드웨어 변환 및 조명 기능이 추가되었다.
Direct3D 8에서는 다이렉트드로를 독립적인 API로 분리시켰다. 버텍스 셰이더와 픽셀 셰이더가 지원되기 시작하였으며, 셰이더를 프로그래머가 직접 프로그래밍할 수 있게 되었지만 정해진 가이드라인이 없어서 그래픽 하드웨어 제조사가 제공하는 셰이딩 어셈블리어를 통해 구현해야 하는 단점이 있다.
Direct3D 9에서는 C언어와 유사한 모습의 고수준 셰이더 언어(HLSL)를 통해 가이드라인을 지원하기 시작하였다. 이로 인해서 HDR, 정점 버퍼 인덱싱과 같은 기능을 사용할 수 있게 되었다.
Direct3D 10은 구조를 대폭 정리하는 등의 큰 변화를 거쳤다. 윈도우 비스타에 기본적으로 포함되어 있지만 하위 버전과의 호환성은 없어서 WDDM 기반에 Direct3D 9 수준의 기능을 구현한 Direct3D 9Ex 라이브러리가 포함되었다.
Direct3D 11은 Direct3D 10에 채택되지 못 했던 테셀레이션과 멀티스레드 기능이 정식으로 추가되었다. 윈도우 비스타 SP2에서 플랫폼 업데이트를 통해 사용이 가능하며, 윈도우 7부터 기본적으로 포함되어 있다.
Direct3D 12는 오픈소스의 벌컨과 AMD의 맨틀의 성격이 같다. 윈도우 10에서만 사용이 가능하다.
디스플레이 모드
다이렉트3D는 다음의 두 가지 화면 방식을 제공한다:
- 전체화면 모드: 다이렉트3D 응용 프로그램은 디스플레이 장치로 모든 그래픽 출력을 만들어 낸다. 이 모드에서 다이렉트3D는 자동으로 Alt-Tab을 잡아 내고 화면 해상도와 화소 포맷을 프로그래머가 관여하지 않아도 설정하고 복원한다. 또한 '예외 합동 방식'(Exclusive Cooperative Mode) 때문에 오류를 찾아내고 수정하는 데에 많은 애를 먹을 수 있다.
- 창 모드: 결과물은 창 영역 안 쪽에 보인다. 다이렉트3D는 GDI와 데이터를 주고 받으며 디스플레이의 그래픽 출력을 만들어 낸다. 드라이버 지원에 따라 창 모드는 전체 화면과 동일하게 수행할 수 있다.
파이프라인
예제
다이렉트3D로 삼각형 그리기:
// A 3-vertex polygon definition
D3DLVERTEX v[3];
// Vertex established
v[0]=D3DLVERTEX( D3DVECTOR(0.f, 5.f, 10.f), 0x00FF0000, 0, 0, 0 );
// Vertex established
v[1]=D3DLVERTEX( D3DVECTOR(0.f, 5.f, 10.f), 0x0000FF00, 0, 0, 0 );
// Vertex established
v[2]=D3DLVERTEX( D3DVECTOR(0.f, 5.f, 10.f), 0x000000FF, 0, 0, 0 );
// Function call to draw the triangle
pDevice->DrawPrimitive( D3DPT_TRIANGLELIST, D3DFVF_LVERTEX, v, 3, 0 );
다이렉트3D 9로 삼각형 그리기:
struct Vertex { float x, y, z; D3DCOLOR color; };
Vertex triangle[] = {
{ 0.f, 5.f, 10.f, 0x00FF0000 },
{ 0.f, 5.f, 10.f, 0x0000FF00 },
{ 0.f, 5.f, 10.f, 0x000000FF }
};
// set Flexible Vertex Format
pDevice->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE);
// Draw - UP stands for 'user pointer', that is data
//is provided through a pointer and not through buffers
pDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, triangle, sizeof(Vertex));
같이 보기
외부 링크
- DirectX 웹사이트
- MSDN: DirectX Graphics and Gaming
- DirectX 10: The Future of PC Gaming Technical article discussing the new features of DirectX 10 and their impact on computer games
모듈:Authority_control 159번째 줄에서 Lua 오류: attempt to index field 'wikibase' (a nil value).
- 스크립트 오류가 있는 문서
- 잘못된 파일 링크가 포함된 문서
- 영어 표기를 포함한 문서
- 위키데이터 속성 P18을 사용하는 문서
- 위키데이터 속성 P41을 사용하는 문서
- 위키데이터 속성 P94를 사용하는 문서
- 위키데이터 속성 P117을 사용하는 문서
- 위키데이터 속성 P154를 사용하는 문서
- 위키데이터 속성 P213을 사용하는 문서
- 위키데이터 속성 P227을 사용하는 문서
- 위키데이터 속성 P242를 사용하는 문서
- 위키데이터 속성 P244를 사용하는 문서
- 위키데이터 속성 P245를 사용하는 문서
- 위키데이터 속성 P268을 사용하는 문서
- 위키데이터 속성 P269를 사용하는 문서
- 위키데이터 속성 P271을 사용하는 문서
- 위키데이터 속성 P347을 사용하는 문서
- 위키데이터 속성 P349를 사용하는 문서
- 위키데이터 속성 P350을 사용하는 문서
- 위키데이터 속성 P373을 사용하는 문서
- 위키데이터 속성 P380을 사용하는 문서
- 위키데이터 속성 P396을 사용하는 문서
- 위키데이터 속성 P409를 사용하는 문서
- 위키데이터 속성 P428을 사용하는 문서
- 위키데이터 속성 P434를 사용하는 문서
- 위키데이터 속성 P435를 사용하는 문서
- 위키데이터 속성 P436을 사용하는 문서
- 위키데이터 속성 P454를 사용하는 문서
- 위키데이터 속성 P496을 사용하는 문서
- 위키데이터 속성 P549를 사용하는 문서
- 위키데이터 속성 P650을 사용하는 문서
- 위키데이터 속성 P651을 사용하는 문서
- 위키데이터 속성 P691을 사용하는 문서
- 위키데이터 속성 P716을 사용하는 문서
- 위키데이터 속성 P781을 사용하는 문서
- 위키데이터 속성 P791을 사용하는 문서
- 위키데이터 속성 P864를 사용하는 문서
- 위키데이터 속성 P865를 사용하는 문서
- 위키데이터 속성 P886을 사용하는 문서
- 위키데이터 속성 P902를 사용하는 문서
- 위키데이터 속성 P906을 사용하는 문서
- 위키데이터 속성 P947을 사용하는 문서
- 위키데이터 속성 P950을 사용하는 문서
- 위키데이터 속성 P966을 사용하는 문서
- 위키데이터 속성 P982를 사용하는 문서
- 위키데이터 속성 P1003을 사용하는 문서
- 위키데이터 속성 P1004를 사용하는 문서
- 위키데이터 속성 P1005를 사용하는 문서
- 위키데이터 속성 P1006을 사용하는 문서
- 위키데이터 속성 P1015를 사용하는 문서
- 위키데이터 속성 P1045를 사용하는 문서
- 위키데이터 속성 P1048을 사용하는 문서
- 위키데이터 속성 P1053을 사용하는 문서
- 위키데이터 속성 P1146을 사용하는 문서
- 위키데이터 속성 P1153을 사용하는 문서
- 위키데이터 속성 P1157을 사용하는 문서
- 위키데이터 속성 P1186을 사용하는 문서
- 위키데이터 속성 P1225를 사용하는 문서
- 위키데이터 속성 P1248을 사용하는 문서
- 위키데이터 속성 P1273을 사용하는 문서
- 위키데이터 속성 P1315를 사용하는 문서
- 위키데이터 속성 P1323을 사용하는 문서
- 위키데이터 속성 P1330을 사용하는 문서
- 위키데이터 속성 P1362를 사용하는 문서
- 위키데이터 속성 P1368을 사용하는 문서
- 위키데이터 속성 P1375를 사용하는 문서
- 위키데이터 속성 P1407을 사용하는 문서
- 위키데이터 속성 P1556을 사용하는 문서
- 위키데이터 속성 P1584를 사용하는 문서
- 위키데이터 속성 P1695를 사용하는 문서
- 위키데이터 속성 P1707을 사용하는 문서
- 위키데이터 속성 P1736을 사용하는 문서
- 위키데이터 속성 P1886을 사용하는 문서
- 위키데이터 속성 P1890을 사용하는 문서
- 위키데이터 속성 P1907을 사용하는 문서
- 위키데이터 속성 P1908을 사용하는 문서
- 위키데이터 속성 P1960을 사용하는 문서
- 위키데이터 속성 P1986을 사용하는 문서
- 위키데이터 속성 P2041을 사용하는 문서
- 위키데이터 속성 P2163을 사용하는 문서
- 위키데이터 속성 P2174를 사용하는 문서
- 위키데이터 속성 P2268을 사용하는 문서
- 위키데이터 속성 P2349를 사용하는 문서
- 위키데이터 속성 P2418을 사용하는 문서
- 위키데이터 속성 P2456을 사용하는 문서
- 위키데이터 속성 P2484를 사용하는 문서
- 위키데이터 속성 P2558을 사용하는 문서
- 위키데이터 속성 P2750을 사용하는 문서
- 위키데이터 속성 P2980을 사용하는 문서
- 위키데이터 속성 P3223을 사용하는 문서
- 위키데이터 속성 P3233을 사용하는 문서
- 위키데이터 속성 P3348을 사용하는 문서
- 위키데이터 속성 P3372를 사용하는 문서
- 위키데이터 속성 P3407을 사용하는 문서
- 위키데이터 속성 P3430을 사용하는 문서
- 위키데이터 속성 P3544를 사용하는 문서
- 위키데이터 속성 P3562를 사용하는 문서
- 위키데이터 속성 P3563을 사용하는 문서
- 위키데이터 속성 P3601을 사용하는 문서
- 위키데이터 속성 P3723을 사용하는 문서
- 위키데이터 속성 P3788을 사용하는 문서
- 위키데이터 속성 P3829를 사용하는 문서
- 위키데이터 속성 P3863을 사용하는 문서
- 위키데이터 속성 P3920을 사용하는 문서
- 위키데이터 속성 P3993을 사용하는 문서
- 위키데이터 속성 P4038을 사용하는 문서
- 위키데이터 속성 P4055를 사용하는 문서
- 위키데이터 속성 P4114를 사용하는 문서
- 위키데이터 속성 P4143을 사용하는 문서
- 위키데이터 속성 P4186을 사용하는 문서
- 위키데이터 속성 P4423을 사용하는 문서
- 위키데이터 속성 P4457을 사용하는 문서
- 위키데이터 속성 P4534를 사용하는 문서
- 위키데이터 속성 P4535를 사용하는 문서
- 위키데이터 속성 P4581을 사용하는 문서
- 위키데이터 속성 P4613을 사용하는 문서
- 위키데이터 속성 P4955를 사용하는 문서
- 위키데이터 속성 P5034를 사용하는 문서
- 위키데이터 속성 P5226을 사용하는 문서
- 위키데이터 속성 P5288을 사용하는 문서
- 위키데이터 속성 P5302를 사용하는 문서
- 위키데이터 속성 P5321을 사용하는 문서
- 위키데이터 속성 P5368을 사용하는 문서
- 위키데이터 속성 P5504를 사용하는 문서
- 위키데이터 속성 P5587을 사용하는 문서
- 위키데이터 속성 P5736을 사용하는 문서
- 위키데이터 속성 P5818을 사용하는 문서
- 위키데이터 속성 P6213을 사용하는 문서
- 위키데이터 속성 P6734를 사용하는 문서
- 위키데이터 속성 P6792를 사용하는 문서
- 위키데이터 속성 P6804를 사용하는 문서
- 위키데이터 속성 P6829를 사용하는 문서
- 위키데이터 속성 P7293을 사용하는 문서
- 위키데이터 속성 P7303을 사용하는 문서
- 위키데이터 속성 P7314를 사용하는 문서
- 위키데이터 속성 P7902를 사용하는 문서
- 위키데이터 속성 P8034를 사용하는 문서
- 위키데이터 속성 P8189를 사용하는 문서
- 위키데이터 속성 P8381을 사용하는 문서
- 위키데이터 속성 P8671을 사용하는 문서
- 위키데이터 속성 P8980을 사용하는 문서
- 위키데이터 속성 P9070을 사용하는 문서
- 위키데이터 속성 P9692를 사용하는 문서
- 위키데이터 속성 P9725를 사용하는 문서
- 위키데이터 속성 P9984를 사용하는 문서
- 위키데이터 속성 P10020을 사용하는 문서
- 위키데이터 속성 P10299를 사용하는 문서
- 위키데이터 속성 P10608을 사용하는 문서
- 위키데이터 속성 P10832를 사용하는 문서
- 위키데이터 속성 P11249를 사용하는 문서
- 위키데이터 속성 P11646을 사용하는 문서
- 위키데이터 속성 P11729를 사용하는 문서
- 위키데이터 속성 P12204를 사용하는 문서
- 위키데이터 속성 P12362를 사용하는 문서
- 위키데이터 속성 P12754를 사용하는 문서
- 위키데이터 속성 P13049를 사용하는 문서
- DirectX
- 3차원 그래픽스 API
- 그래픽 라이브러리
- 1995년 소프트웨어