3 min read

DirectXMath 라이브러리

다이렉트에서는 수학적 라이브러리를 따로 제공하고있다.

해당 라이브러리는 사용할려면 xnamath.h 추가했어야했지만 언제부터인지 현재 2017에서는 DirectXMath.h 로 바뀌었다.

이 라이브러리의 특징은 SSE2의 명령집합을 사용한다는 점이다. 이는 SIMD의 레지스터를 사용해서 여러개의 값을 한번에 처리 할수 있다는 의미이다.

VS 2017에서는 따로 라이브러리 속성에 추가할 필요가 없이 바로 사용가능하다.

먼저 간단한 0행렬과 단위행렬을 출력하는 코드이다.

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
#include <iostream>
#include <DirectXMath.h>
using namespace DirectX;
std::ostream& operator<<(std::ostream &os, XMVECTOR & xmv) {
    XMFLOAT3 float3;
    XMStoreFloat3(&float3, xmv);
    return os << float3.x << ” “ << float3.y << ” “ << float3.z;
}
int main()
{
    if (!XMVerifyCPUSupport()) {
        std::cout << “Cpu Not Supported” << std::endl;
    }
    XMVECTOR zero = XMVectorZero(); // 0 행렬
    XMVECTOR one = XMVectorSplatOne(); // 단위 행렬
    std::cout << zero << std::endl;
    std::cout << one << std::endl;
    return 0;
}
cs

XMVECTOR는 SSE를 사용하기 위해 사용하는 구조체이며 네 개의 부동소수점 값들로 이루어 져있다.

3차원 형태로 사용할려면 마지막에 0을 주어주면 무방하다.

vs에서는 typedef로 되어있고 32비트 부동소수점 값을 SSE를 사용할수 있도로 16바이트 경계를 정렬해 준다.

자세한건 코드를 보기 바란다.

이 라이브러리는 수학 라이브러리 이므로 벡터의 다양한 연산을 지원한다.

자세한건 https://msdn.microsoft.com/ko-kr/library/windows/desktop/ee418725(v=vs.85).aspx

를 보는게 좋겠다.

일단 간단하게 벡터의 외적을 구한뒤 정말 90도인지 내적을 이용해 구해보자.

벡터의 외적과 내적의 특정은 다루지 않는다.

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
31
32
#include <iostream>
#include <DirectXMath.h>
using namespace DirectX;
std::ostream& operator<<(std::ostream &os, XMVECTOR & xmv) {
    XMFLOAT3 float3;
    XMStoreFloat3(&float3, xmv);
    return os << float3.x << ” “ << float3.y << ” “ << float3.z;
}
int main()
{
    if (!XMVerifyCPUSupport()) {
        std::cout << “Cpu Not Supported” << std::endl;
    }
    XMVECTOR u = { 1,4,3,0 };
    XMVECTOR v = { 2,4,5,0 };
    XMVECTOR cross = XMVector3Cross(u, v); // 벡터의 외적 이는 u와 v와 직각인 벡터
    std::cout << “외적 “ << cross << std::endl;
    XMVECTOR result = XMVector3Dot(cross, u);
    std::cout << “곱 결과 “ << result << std::endl;;
    return 0;
}
cs

코드는 이와같다.

 

해당 코드를 실행 시킨 결과이다