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 순으로 만들어서 곱해주면된다.