일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 백준
- 운영체제
- 다이나믹 프로그래밍
- 컨디션 변수
- codility
- directx
- I/O장치
- 동적계획법
- 쓰레드
- 타입 객체
- 병행성
- 디자인패턴
- 프로그래머스
- 자료구조
- 알고리즘
- OS
- 멀티쓰레드
- 멀티프로세서
- 스케줄링
- DirectX 12
- DirectX12
- 렌더링 파이프라인
- 그리디 알고리즘
- 그리디알고리즘
- 파일시스템 구현
- 영속성
- 병행성 관련 오류
- Direct12
- 다이나믹프로그래밍
- 락
- Today
- Total
목록DirectX (24)
기록공간

기능 수준이라는 개념은 Direct3D 11에서 도입된 것으로, 코드에서는 D3D_FEATURE_LEVEL이라는 enum형으로 대표된다. 기능 수준들은 대략 버전 9에서 11까지의 여러 Direct3D 버전들에 대응된다. 기능 수준들은 GPU가 지원하는 기능들의 엄격한 집합을 정의한다(각 기능들이 지원하는 구체적인 내용은 SDK를 참고). 예를들어 기능 수준 11을 지원하는 GPU는 반드시 Direct3D 11의 기능 집합 전체를 지원해야 한다. 이러한 기능 수준은 응용 프로그램 개발을 편하게 해주는 요인이다. 현재 GPU의 기능 수준을 파악하기만 하면, 구체적으로 어떤 기능을 사용할 수 있는지를 확실히 알 수 있기 때문이다. 사용자의 하드웨어가 특정 기능 수준을 지원하지 않는 경우 응용 프로그램이 실행..

모니터의 픽셀들이 무한히 작지는 않기 때문에, 모니터 화면에 선을 완벽하게 나타내는 것은 불가능하다. 모니터에 선을 출력했을때 흔히 나타나는 현상이 있는데 이것을 '계단 현상' 또는 앨리어싱(Aliasing) 효과라고 부른다. 삼각형 변에서도 이와 비슷한 효과가 나타난다. 모니터의 해상도를 키운다면 이런 현상이 줄어들긴 하겠지만 완벽하게 없애기란 불가능하다. 그래서 이를 해결하기 위한 여러 기법이 있다. 이를 보통은 계단 현상을 제고 한다고 하여 '안티 앨리어싱(Antialiasing)' 이라고 부른다. 한번 알아 보도록 하겠다. 우선 첫번째 기법은 슈퍼샘플링(초과표본화)(Supersampling)이라는 기법이다. 우선 그릴 후면 버퍼를 화면 해상도의 4배 (가로, 세로로 2배씩)로 잡고, 장면을 후면 ..
랜더링 과정에서 GPU는 자원들에 자료를 기록하거나 (예를들어 후면버퍼나 깊이 스텐실 버퍼와 같은 자원들) 자원들에서 자료를 읽어 들인다(예를들어 표면의 모습을 서술하는 텍스처나 장면 안의 기하구조의 3차원 위치들을 담은 버퍼). 그리기 명령을 제출하기 전에, 먼저 해당 그리기 호출이 참조할 자원들을 렌더링 파이프라인에 묶어야(Bind)한다. 이를 가리켜 자원을 파이프라인에 "연결(Link)한다" 또는 "바인딩(Binding)한다"라고 말하기도 한다. 그리기 호출마다 달라지는 자원도 있으며, 필요에 따라 그리기 호출마다 그런 자원들의 바인딩을 갱신해주어야 한다. 그런데 GPU 자원들이 파이프라인에 직접 묶이는 것은 아니다. 실제로 파이프라인에 묶이는 것은 해당 자원을 참조하는 서술자(Descriptor)..

깊이 버퍼(Depth Buffer)는 앞서 텍스처 형식에서 잠깐 다루었듯이 이미지 자료를 담지 않는 텍스처의 한 예이다. 깊이 버퍼는 각 픽셀의 깊이 정보를 담고 있다. 픽셀의 깊이는 0.0에서 1.0사이의 값으로 0.0은 시야 절두체(View Frustum)안에서 가장 가까운 물체에 해당하고 1.0은 절두체 안에서 가장 먼 물체에 해당한다. 깊이 버퍼의 원소들과 후면 버퍼의 픽셀들은 일대일로 대용된다. 예를 들면 후면 버퍼의 해상도가 1280 x 1024라면 깊이 버퍼 또한 1280x1024개의 원소들로 구성된다. 몇몇 물체가 다른 물체들을 가리고 있다고 해보자 한 물체의 픽셀들이 다른 물체보다 앞에 있는지 판정하기 위해 Direct3D는 깊이 버퍼링 또는 z-버퍼링이라는 기법을 사용한다. 깊이 버퍼링..

예를 들어 모니터에 하나의 프레임 버퍼를 가지고 게임 세상을 표현한다고 생각해보자. 매 프레임마다 버퍼를 지우고 그리거나 이미 그려진 버퍼에 덮어 쓰게 될것이다. 전자 같은 경우에는 지우고 다시 그리다보니 찰나의 시간에 지워진 버퍼가 보여지게 되고 이것이 화면 깜빡임(Screen Flickering)현상으로 보여지게 될것이다. 그리고 후자 같은 경우에는 덮어 쓰는 도중에 현재 그리는 프레임 데이터와 이전 프레임 데이터가 같이 보이는 순간이 생겨 화면 찢어짐(Screen Tearing) 현상이 생길 것이다. 결국 그려지는 과정이 보이다보니 보는 사람 입장에서는 불편할 수 밖에 없을것이다. 이러한 현상들을 피하고자 사용하는 방법이 바로 2개의 프레임 버퍼를 이용하는 것이다. 2개의 프레임 버퍼는 각각 화면 ..

2차원 텍스처는 자료 원소들의 행렬(2차원 배열)이다. 2차원 텍스처의 용도 중 하나는 2차원 이미지 자료를 저장하는 것인데, 이때 텍스처의 각 원소는 픽셀 하나의 색상을 담는다. 하지만 텍스처가 꼭 이미지 자료의 저장만을 위해 사용되는 것은 아니며 훨씬 범용적으로 사용된다. 예를 들면 법선 매핑 같은 경우 텍스처에 각 원소의 색상이 아닌 3차원 벡터를 담는다. 텍스처에는 아무 자료나 담을 수 있는 것은 아니다. 텍스처에는 특정 형식(format)의 자료 원소들만 담을 수 있는데, 구체적인 형식은 DXGI_FORMAT이라는 열거형으로 지정한다. 자료 원소 형식들을 나열하면 다음과 같다. 이 형식들이 뜻하는 것을 확인하는 방법은 다음과 같다. 그리고 무형식(typeless) 텍스처들도 있는데, 이런 텍스처..

COM(Component Object Model)은 DirectX의 프로그래밍 언어 독립성과 하위 호환성을 가능하게 하는 기술이다. C++ 클래스로 간주하고 사용해도 무방하기 때문에 주로 COM 객체라고 흔히 부른다. COM 객체는 COM 인터페이스라고도 불린다. 사용자는 COM의 대부분의 세부사항을 볼 수 없다. 그저 사용자가 알아야 할 것은 필요한 COM 객체를 가리키는 포인터를 특별한 함수를 이용해서, 또는 다른 COM 인터페이스의 메서드를 이용해서 얻는 방법뿐이다. C++처럼 사용하는 방법과 유사하게 COM 객체를 사용할 수 있지만, C++과 다르게 COM 객체는 new나 delete를 이용하여 생성, 삭제를 할 수 없다. 반드시 생성을 위한 별도의 API 함수를 써야하며 그 인터페이스의 Rele..

Direct3D는 응용 프로그램에서 GPU(그래픽 처리 장치)를 제어하고 프로그래밍하는 데 쓰이는 저수준 그래픽 API(응용 프로그래밍 인터페이스)이다. 이를 이용하여 응용 프로그램은 3차원 그래픽 가속 기능을 이용해서 3차원 세계를 렌더링할 수 있게 된다. 게임 세계를 렌더링 하는데 있어 어떻게 하드웨어를 사용해야 할지에 대해서 필요한 명령들을 제공하여 사용자는 그것을 호출해주면 된다. 응용 프로그램과 그래픽 하드웨어 사이에 Direct3D라는 간접층과 하드웨어 드라이버가 Direct3D 명령들을 시스템의 GPU가 직접 이해하는 고유한 기계어 명령들로 번역해 주므로 사용자는 GPU의 세부사항을 고려할 필요가 없다. 단, 이를 위해서는 Nvidia, Intel과 같은 GPU 제조사들이 Direct3D 팀..