※ 상수벡터

     ▶ 상수(const) XMVECTOR 인스턴스에는 반드시 XMVECTORF32 형식을 사용해야 한다.

     ▶ XMVECTORF32는 16바이트 경계에 정합되는 구조체로 , XMVECTOR로의 변환 연산자들을 제공한다.

     ▶ 정수 자료를 담은 상수 XMVECTOR를 생성하고 싶으면 XMVECTORU32를 사용한다.

   

    # 사용한 예시

코드
출력

 XMVECTORU32 는 본인이 잘못 사용하는건지 모르겠는데

여러가지 테스트 해보니 원하는 값이 안나온다.

 

※ 중복적재된 연산자들

     ▶ XMVECTOR에는 벡터 덧셈, 뺄셈, 스칼라 곱셈을 위해 중복적재(overloading)된 여러 연산자가 있다.

 

※ 기타 상수 및 함수

     ▶ π(원주율)가 포함된 여러 공식의 근삿값을 구할 때 유용한 다음과 같은 상수들을 정의한다.

     ▶  라디안(radian) 단위 각도와 도(degree) 단위 각도 사이의 변환을 위한 인라인 함수도 제공한다.

     ▶  최솟값/최댓값 함수들도 있다.

 

※ 설정 함수     

     ▶   DirectXMath 라이브러리는 XMVECTOR 객체의 내용을 설정하는 용도로 다음과 같은 함수들을 제공한다.

0벡터(0)를 돌려준다.

벡터 (1, 1, 1, 1)을 돌려준다.

벡터 (x, y, z, w)을 돌려준다.

벡터 (s, s, s, s)을 돌려준다.

벡터 (Vx, Vx, Vx, Vx)을 돌려준다.

벡터 (Vy, Vy, Vy, Vy)을 돌려준다.

벡터 (Vz, Vz, Vz, Vz)을 돌려준다.

     # 사용한 예시

 

※ 벡터 함수들

     ▶   DirectXMath 라이브러리는 다양한 벡터 연산을 위한 함수들을 제공한다. 다음은 그중 3차원 벡터를 위한 함수들이다. 2차원 벡터나 4차원 벡터를 위한 함수들도 물론 있는데, 함수 이름에 3대신 2나 4가 쓰인다는 점만 다를 뿐이다.

ll V ll 를 돌려준다.(절대값을 돌려준다.)

ll V ll ²  돌려준다.( 절대값의 제곱을 돌려준다.)

V₁ . V₂ 를 돌려준다.(내적을 돌려준다.)

V₁  x V₂ 를 돌려준다.(외적을 돌려준다.)

V / ll V ll 를 돌려준다.(정규화 벡터를 돌려준다.)

V에 수직인 벡터를 돌려준다.

V₁과 V₂ 사이의 각도를 돌려준다.

pParallel => projⁿ (V)를 돌려준다.

pPerpendicular => projⁿ (V)를 돌려준다.

V₁ = V₂를 돌려준다.

V₁ ≠ V₂를 돌려준다.

     # 사용한 예시

 

※ 부동소수점 오차

     ▶   컴퓨터에서 벡터를 다룰 때 주의해야 할 점이 있다. 바로,  부동소수점 수(Floating-pointnumber)들을 비교할 때 부동소수점의 부정확함을 반드시 고려해야 한다는 점이다.  당연히 같을 것 같은 두 부동소수점 수가 사실 약간 다를 수 있다. 예를들어 정규화된 벡터의 길이는 수학적으로 정확히 1이어야 하지만, 컴퓨터 프로그램 안에서 그 길이는 근사적으로만 1이다. 더 나아가서 , 임의의 실수 p에 대해  1^p = 1이지만, 근삿값으로만 표현되는 부동소수점 연산에서는 거듭제곱 과정에서 오차가 증가한다. 즉, 수치 오차가 누적되는 것이다. 다음은 이러한 개념을 보여주는 짧은 프로그램이다.

     ▶   부동소수점은 이러한 부정확함 때문에 두 부동소수점 수의 상등을 판정할 때에는 두 수가'근사적으로' 같은지를 보아야 한다. 이를 위해, 허용 오차로 사용할 아주 작은 수인 엡실론(epsilon)을 정하고 , 그 값을 이를테면 Epsilon이라는 상수로 코드 안에 정의해 둔다. 만일 거리가 Epsilon보다 작으면 두 수는 근사적으로 상등인 것이다.

다음은 Epsilon을 이용해서 두 부동소수점 수의 상등을 판정하는 방법을 보여주는 함수이다.(만든 것)

DirectXMath 라이브러리에는 두 벡터의 상등을 판정하는 함수가 있다.(라이브러리에서 제공)

     

 

          

'Directx12 > DirectX 내용' 카테고리의 다른 글

DirectXMath 라이브러리의 벡터(2)  (0) 2022.08.14
DirectXMath 라이브러리의 벡터(1)  (0) 2022.08.02

+ Recent posts