본문 바로가기

DX

DirectX Math

DirectX Math 직접 사용하기 힘들기 때문에 대부분의 초보자는 SimpleMath 쓴다.

 

아래의 방식으로 vcpkg 를 이용해 쉽게 설치 가능하다.

// SimpleMath
// vcpkg install directxtk:x64-windows

 

 

 

아래의 코드로 dx math 가 이 컴퓨터에서 사용될수 있는지 확인한다.

 if (!XMVerifyCPUSupport()) {
     cout << "directx math not supported" << endl;
     return -1;
 }

 

 

XMVECTOR 와 XMFLOAT2,3,4 가 있다.

XMVECTOR 는 SIMD 가속을 사용한다. 보다 빠름~

 

클래스 멤버 변수로 데이터를 저장할 때는 XMFLOAT 을 쓰는 것이 좋다. 연산을 할 때는 XMVECTOR 로 변환하고 연산하는게 좋다.

 

요약
1. XMVECTOR: 지역 또는 전역 변수
2. XMFLOAT2, 3, 4: 클래스 멤버
3. XMStoreFloat2, 3, 4:XMFLOAT2, 3, 4 -> XMVECTOR 
4. XMVECTOR로 연산
5. 결과를 다시 XMFLOAT N으로 저장

 

요약을 아래로 표현 가능하다.

 // DirectXMath를 이용해서 벡터의 길이를 구하는 경우
 XMFLOAT4 xfloat4 = {1.0f, 2.0f, 3.0f, 1.0f};
 XMVECTOR xvector = XMLoadFloat4(&xfloat4);
 xvector = XMVector3Length(xvector); // sqrt(1*1 + 2*2 + 3*3), 함수 이름이
                                     // XMVector 숫자3 Length() 입니다.

 float length;
 XMStoreFloat(&length, xvector);

 

 

이렇게 번거롭게 하는 이유가 SIMD 가속을 받기 위해서다.

CPU 는 한 번에 연산을 여러번 할 수 있다. 이것을 최대한 활용 할 때 가장 좋은 형식이 XMVECTOR 인 것이다.

 

이 DirectX math 쓸려면 glm 가 차이가 사실상 1개이다.

그냥 Row Major 니까 modelMat 만들 때 srt  순으로 만들어서 곱해주면된다.

 

 

'DX' 카테고리의 다른 글

D3D11 초기화  (0) 2025.06.15
COM 과 D3D  (0) 2025.06.15
조명, 노멀 벡터 변환 (GLM)  (0) 2025.06.06
GLM  (0) 2025.06.06
좌표계 변환  (0) 2025.05.11