일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 그리디알고리즘
- OS
- codility
- 스케줄링
- 락
- Direct12
- 프로그래머스
- 다이나믹 프로그래밍
- 자료구조
- 그리디 알고리즘
- 쓰레드
- 알고리즘
- 파일시스템 구현
- 타입 객체
- directx
- 디자인패턴
- 동적계획법
- 운영체제
- I/O장치
- 병행성
- 백준
- 병행성 관련 오류
- 렌더링 파이프라인
- 컨디션 변수
- DirectX12
- 멀티프로세서
- 멀티쓰레드
- DirectX 12
- 다이나믹프로그래밍
- 영속성
- Today
- Total
목록DirectX (24)
기록공간

왼쪽은 빛을 비추지 않은 구이고 오른쪽은 빛을 비춘 구이다. 왼쪽 그림은 상당히 평평해 보인다. 사실 구가 아니라 그냥 2차원 원처럼 보인다. 반면 오른쪽의 구는 실제로 3차원의 구처럼 보인다. 이처럼 조명과 음영은 물체의 입체감과 부피감을 묘사하는 데 큰 도움이 된다. 실제로, 인간의 시각적인 인식은 빛과 물체 재질의 상호작용에 의존한다. 따라서 실사적인 묘사 부분의 상당 부분이 물리적으로 정확한 조명 표현이다. 일반적으로 조명 표현이 정확할수록 계산 비용이 높아진다. 따라서 사실감과 처리 속도의 밸런스를 맞추는 것이 중요하다. 예를 들어 영화 같은 경우는 게임에 비해 더 사실적인 조명 표현이 가능하다. 왜냐하면 영화에서의 그래픽은 실시간 처리가 아닌 미리 렌더링을 계산하기 때문이다. 따라서 한 프레임..

상수 버퍼 상수 버퍼의 생성 상수 버퍼는 쉐이더 프로그램에서 참조하는 자료를 담는 GPU 자원(ID3D12Resource)의 예이다. 앞에서 말했듯이 텍스처나 기타 버퍼 자원 역시 쉐이더 프로그램에서 참조할 수 있다. 이전에 봤던 정점 쉐이더 코드에 이런 코드가 있었다. cbuffer cbPerObject : register(b0) { float4x4 gWorldViewProj; }; 이 코드는 cbPerObject라는 cbuffer 객체(상수 버퍼)를 참조한다. 이 예에서 상수 버퍼는 gWorldViewProj라는 4 x 4 행렬 하나만 저장한다. 이 행렬은 한 점을 Local space에서 동차 절단 공간으로 변환하기 위해, World 행렬, View 행렬, Projection 행렬을 결합한 것이다...
인덱스와 인덱스 버퍼 정점들과 마찬가지로, GPU가 인덱스의 배열에 접근할 수 있으려면 인덱스들을 버퍼 GPU자원(ID3D12Resource)에 넣어 두어야 한다. 인덱스들을 담는 버퍼를 인덱스 버퍼라고 부른다. d3dUtil:: CreateDefaultBuffer 함수(이전 장에서 설명했었음)는 void*를 통해 자료를 처리하므로, 인덱스 버퍼뿐만 아니라 모든 기본 버퍼를 생성할 수 있다. 인덱스 버퍼를 파이프라인에 묶으려면 인덱스 버퍼 자원을 서술하는 인덱스 버퍼 뷰를 만들어야 한다. 정점 버퍼 뷰처럼 인덱스 버퍼 뷰에도 서술자 힙이 필요하지 않다. 인덱스 버퍼 뷰를 대표하는 형식은 구조체 D3D12_INDEX_BUFFER_VIEW이다. typedef struct D3D12_INDEX_BUFFER_V..

이번 장에서는 그리는 과정에 필요한 Direct3D API의 여러 인터페이스와 메서드를 중점적으로 살펴본다. (코드는 https://github.com/d3dcoder/d3d12book에서 받을 수 있다. (chapter 6)) 정점과 입력 배치 Direct3D는 정점의 위치 이외의 추가적인 자료를 부여할 수 있다. 원하는 자료를 가진 정점 형식을 만들려면 우선 그러한 자료(벡터 형식)를 담을 구조체를 정의해야 한다. 다음은 서로 다른 두 가지 정점 형식의 예이다. 하나는 위치의 색상으로 구성되고 또 하나는 위치, 법선, 그리고 두 개의 텍스처 좌표로 구성된다. struct Vertex1 { XMFLOAT3 Pos; XMFLOAT3 Color; }; struct Vertex2 { XMFLOAT3 Pos;..

테셀레이션 단계들 테셀레이션은 주어진 메시의 삼각형들을 더 잘게 쪼개서 새로운 삼각형들을 만드는 과정을 말한다. 새 삼각형들을 새로운 위치로 이동함으로써 원래 메시에 없는 세부적인 특징을 만들어 낼 수 있다. 테셀레이션은 여러 장점이 있다. 1. 카메라에 가까운 삼각형들에는 테셀레이션을 적용해서 세부도를 높이고, 먼 삼각형들에는 테셀레이션을 적용하지 않는 방식의 세부 수준(Level-Of-Detail, LOD)을 구현할 수 있다. 이렇게 하면 관찰자가 실제로 볼 수 있는 부분에만 많은 삼각형을 사용하게 되므로 효율적이다. 2. 적은 수의 삼각형들로 이루어진 메시를 메모리에 담아두고 즉석으로 삼각형을 추가하여 메모리를 절약할 수 있다. 3. 애니메이션이나 물리 처리 같은 연산들을 단순한 저 다각형 메시에 ..

입력 조립기 단계(Input Assembler, IA) 입력 조립기 단계는 메모리에서 기하 자료(정점, 인덱스)를 읽어서 기본 도형(삼각형, 선분 등)을 조립한다. 정점(Vertex) 수학적으로, 한 삼각형의 정점은 두 변이 만나는 점이다. 선분의 경우 선분의 양 끝점이 정점이고, 하나의 점의 경우에는 그 점 자체가 정점이다. Direct3D의 정점은 본질적으로 공간적 위치 이외의 정보도 담을 수 있으며, 이를 통해 좀 더 복잡한 렌더링 효과를 낼 수 있다. 예를 들면, 조명을 구현하기 위해 정점에 법선 벡터(normal vector)를 추가하며, 텍스처 적용을 위해 정점에 텍스처 좌표를 추가한다. 또한 Direct3D는 응용 프로그램이 자신만의 정점 형식을 정의할 수 있는(성분들을 직접 정의할 수 있는..

우리가 사용하는 컴퓨터의 모니터는 평면이다. 홀로그램이 아닌 이상은 직접 3차원의 세계를 모니터에 그대로 구현할수 있는 방법은 없다. 카메라에 비친 3차원 장면을 2차원 이미지로 생성하는 데 필요한 일련의 단계들을 렌더링 파이프라인(rendering-pipeline)이라고 부른다. 위 그림에서 왼쪽 이미지는 3차원 세계에 배치된 물체들과 그것을 바라보는 카메라를 옆에서 본 모습이고, 중간 이미지는 위쪽에서 바라본 모습이다. 그리고 오른쪽 이미지는 카메라 시점에서 바라본 3차원 세계를 2차원으로 만들어낸 모습이다. 3차원의 환상 3차원 그래픽을 살펴보기 전에 간단하지만 중요한 질문 하나에 답할 필요가 있다. 바로, "3차원 세계의 깊이와 부피를 어떻게 평평한 2차원 모니터 화면에 나타낼 것인가?"라는 질문..
애니메이션을 정확하게 수행하려면 시간을 측정해야 한다. 특히, 프레임 간 경과 시간(Elapsed time), 다시 말해 애니메이션의 인접한 두 프레임 사이에 흐른 시간의 양을 측정할 수 있어야 한다. 프레임률이 높은 경우 프레임 간 경과 시간이 상당히 짧으므로, 정밀도가 높은 타이머를 사용할 필요가 있다. 성능 타이머 정밀한 시간 측정을 위해, Windows가 제공하는 성능 타이머(Perfomance timer)를 사용한다. 이를 성능 카운터(Performance counter) 라고도 부른다. 성능 타이머를 조회하는 메서드를 사용하려면 반드시 Windows.h를 포함시켜야 한다. 성능 타이머의 시간 측정 단위는 '지나간 클럭 틱들의 개수(count)' 이다. 성능 타이머로부터 틱 수 단위의 현재 시간..