목록Game Dev/DirectX (21)
KoreanFoodie's Study
'DirectX 12를 이용한 3D 게임 프로그래밍 입문'을 읽으며 내용을 정리하고 중요한 부분을 기록하는 글입니다. 4-4. 시간 측정과 애니메이션 (타이머, GameTimer 클래스) 알아 두어야 할 개념들 : 1. 성능 타이머 정밀한 시간 측정을 위해, 이 책의 예제들은 Windows가 제공하는 성능타이머(perfomance timer)를 사용한다. 이를 성능 카운터(performance counter)라고도 부른다(Windows.h 를 include). 성능 타이머의 시간 측정 단위는 '지나간 클럭 틱(tick)'들의 개수(count)이다. 성능 타이머로부터 틱 수 단위의 현재 시간을 얻을 때에는 다음과 같이 QueryPerformanceCounter 함수를 사용한다. __int64 currTim..
'DirectX 12를 이용한 3D 게임 프로그래밍 입문'을 읽으며 내용을 정리하고 중요한 부분을 기록하는 글입니다. 4-3. Direct3D 초기화 (ID3D12Device, Fence, 4X MSAA 점검 등) Direct3D 초기화 과정은 다음과 같은 단계들로 구성된다. 1. D3D12CreateDevice 함수를 이용해서 ID3D12Device를 생성한다. 2. ID3D12Fence 객체를 생성하고 서술자들의 크기를 얻는다 3. 4X MSAA(Multisample anti-aliasing) 품질 수준 지원 여부를 점검한다. 4. 명령 대기열과 명령 목록 할당자, 그리고 주 명령 목록을 생상한다. 5. 교환 사슬을 서술하고 생성한다. 6. 응용 프로그램에 필요한 서술자 힙들을 생성한다. 7. 후면 ..
'DirectX 12를 이용한 3D 게임 프로그래밍 입문'을 읽으며 내용을 정리하고 중요한 부분을 기록하는 글입니다. 4-2. Direct3D 기초 : CPU와 GPU의 상호작용 , 명령 대기열, CPU/GPU 동기화 알아 두어야 할 개념들 : 명령 대기열과 명령 목록 CPU는 GPU와 상호작용하며 그래픽을 그려준다. 우리는 GPU와 CPU가 각각 쉬지 않고 열심히 일하기를 원한다. CPU/GPU 사이에는 동기화가 필요하지만, 동기화는 병렬성을 망칠 수 있다. 즉, 명령 대기열이 꽉 차 CPU가 놀거나 명령 대기열이 비어 있어 GPU가 노는 상황은 방지해야 한다. Direct3D 12에서 명령 대기열을 대표하는 인터페이스는 ID3D12CommandQueue이다. 이 인터페이스를 생성하려면 대기열을 서술하..
'DirectX 12를 이용한 3D 게임 프로그래밍 입문'을 읽으며 내용을 정리하고 중요한 부분을 기록하는 글입니다. 4-1. Direct3D 기초 : COM, 텍스쳐 형식, 교환사슬과 페이지 전환, 깊이 버퍼링, 다중 표본화, DXGI, 상주성 알아 두어야 할 개념들 : COM(Component Object Model) COM은 DirectX의 프로그래밍 언어 독립성과 하위 호환성을 가능하게 하는 기술이다. COM 객체를 C++ 클래스로 간주하고 사용해도 무방하다. 프로그래머는 COM 인터페이스의 함수들과 메서드를 이용하기만 한다. (new로 생성할 일이 없다는 뜻이다.) 또한 delete로 메모리를 해제하는 것이 아니라 release를 통해 더 이상 해당 객체를 사용하지 않음을 명시해 주어야 한다. ..
'DirectX 12를 이용한 3D 게임 프로그래밍 입문'을 읽으며 내용을 정리하고 중요한 부분을 기록하는 글입니다. 3. 선형변환, 아핀변환, 좌표 변환, DirectXMath 변환 함수 알아 두어야 할 개념들 : 선형변환 선형변환은 벡터들 사이의 결합 연산으로 이해하면 된다. u + v는 벡터끼리의 합이고, k * v는 벡터 v에 스칼라 값 k를 곱한 scaling이다. 회전 벡터 v를 축 n에 대해 최전한다고 하자. 이러한 변환에서 회전각은 n을 내려다보는 방향(즉, n의 반대 방향)을 기준이로 시계방향으로 측정한다. 또한 ||n|| = 1 이라고 가정한다. 우선 v를 두 부분으로 분해한다. 하나는 n에 평행한 부분이고 또 하나는 n에 수직인(직교) 부분이다. 평행한 부분은 그냥 proj(v)이다...
'DirectX 12를 이용한 3D 게임 프로그래밍 입문'을 읽으며 내용을 정리하고 중요한 부분을 기록하는 글입니다. 2. DirectXMath 라이브러리의 행렬 다루기 알아 두어야 할 개념들 : 간단한 행렬 연산들 (행렬의 곱, 역행렬, 여인수, Transpose, Cramer's Rule 등)에 대한 설명을 여기에서는 다루지 않는다. 벡터와 행렬 연산에 대한 내용은 여기에서 참고하도록 하자. 대신 꼭 기억해야 할 것 한 가지만 짚고 넘어가려 한다. 가장 중요한 것 : 역행렬과 행렬식의 기하학적인 의미 두 벡터로 이루어진 행렬의 행렬식(determinant)은 평행사변형의 넓이이다. 이러한 평행사변형을 단위벡터 두 개로 이루어진 정사각형으로 변환한다고 가정해 보자(Identity Matrix 같은 녀석..
'DirectX 12를 이용한 3D 게임 프로그래밍 입문'을 읽으며 내용을 정리하고 중요한 부분을 기록하는 글입니다. 1. 벡터의 개념과 DirectXMath 라이브러리의 벡터 알아 두어야 할 개념들 : - 직교 투영 : projection이라고 하는 이 개념은, 그냥 기본이다. proj(w)v라고 하면 v벡터 중 w벡터 방향의 요소를 추출할 수 있다. - 그람 슈미트 직교화 (gram schmidt orthogonalization) 그람 슈미트 직교화는 선형대수학을 들으면 모를 수가 없을 정도로 중요한 정리이다. 간단히 말해서, N차원 공간의 벡터를 각 차원을 대표하는 벡터들로 분해(decomposition)하는 것이다. 구체적인 방법이나 증명은 아래 사진을 참고하면 된다. - 2차원 유사 외적 : 사..
DirectX 11 2D 게임 프로그래밍 - 15. UV 좌표 조작과 Sampler State설정 UV 좌표 조작하기 - UV 좌표를 임의로 늘릴 순 있지만, 픽셀 데이터를 추출할 때는 반드시 0~1 범위로 맞춰야 한다. Sampler State 설정과 세팅하기 - Filter에서는 세 가지만 기억 MIN - 축소, Mag - 확대, MIP - 밉맵 - Point에서는 끊어지는 듯한 이미지, Linear는 부드러운 이미지를 얻을 수 있다. - CLAMP, WRAP 등의 Address Mode를 활용하여 확장된 UV 공간을 처리할 수 있다. Mipmap 보충설명 Execute.cpp Sampler State를 설정해 주자. //Create Sampler State { D3D11_SAMPLER_DESC de..
DirectX 11 2D 게임 프로그래밍 - 14. Texture 설정과 이미지 띄우기 화면에 이미지 띄우기 - ID3D11ShaderResourceView를 사용하여 텍스쳐 자원 생성 - 텍스쳐 좌표계는 좌측 상단이 시작점이고, 0~1 범위로 정규화되어 있음 - HLSL에서는 Texture2D 자료형으로 텍스쳐 자원을 받는다 - 해당 픽셀이 그려낼 텍스쳐 색상을 추출하기 위해 Sample 함수를 사용한다 투명한 픽셀 제거하기 - clip() 함수를 이용해 제거할 수 있다. - if 문과 discard 키워드를 이용해 제거할 수 있다. Execute.h 먼저 헤더 파일에서 ID3D11ShaderResourceView를 만들어 준다. struct VertexTexture { D3DXVECTOR3 posit..
DirectX 11 2D 게임 프로그래밍 - 13. Rasterizer state과 좌표계 Rasterizer State 설정하기 - FillMode는 정점들로 인해 만들어진 영역을 어떻게 채울 것인가에 대한 정보이다 - CullMode는 어떤 면을 보이지 않게 할 것인가에 대한 정보이다 - FrontCounterClockWise는 정점이 그려지는 순서에 따라 앞면과 뒷면을 정해주는 값이다. Culling 과 Cliping DirectX vs OpenGL 좌표계 Execute.cpp 먼저 Execute.h에서 rasterizer_state를 선언해 준 후, Execute.cpp에서 D3DX... 에 해당하는 값들을 세팅해준다. ID3D11RasterizerState* rasterizer_state = n..