C++ Rookiss Part2 게임 수학과 DirectX12 : Vector
🙇♀️Vector
🪐Vector
- cosx = a
- x = cos^-1(a)
u = (1,2), v = (3,-4)
u + v = (4,-2)
u - v = (-2,6)
-2u + v = (-2,-4) + (3,-4) = (1,-8)
- u = (-1,3,2), v = (3,-4,1)일 때, u와 v를 정규화
-
u의 정규화 = (x/ u , y/ u , z u ) - (-1/14^(1/2), 3/14^(1/2), 2/14^(1/2)), (3/26^(1/2), -4/26^(1/2), 1/26^(1/2))
-
u * v = | u | * | v | * cosX |
u * v = 0이면 직각
p = projn(v) = (V*n/ | n | )*n/ | n | = (V * N)/ | n | ^2 * n |
🪐외적
W = U X V = (Uy*Vz - UzVy, UzVx - UxVz, UxVy - UyVx)
W는 U와 V모두 직교인 벡터
- 외적을 이용한 직교화
-
W0 = V0/ V0 -
W2 = W0*V1 / W0*V1 - W1 = W2 * W0
-
🪐DirectXMath
- XMVECTOR
- 지역 변수나 전역 변수에는 XMVECTOR를 사용한다.
- 클래스 자료 멤버에는 XMFLOAT2나 XMFLOAT3, XMFLOAT4를 사용한다.
- 계산을 수행하기 전에 적재 함수들을 이용해서 XMFLOATn을 XMVECTOR로 변환한다.
- XMVECTOR 인스턴스들로 계산을 수행한다.
- 저장 함수들을 이용해서 XMVECTOR를 XMFLOATn으로 반환한다.
적재 및 저장 함수
- XMFLOAT2를 XMVECTOR에 적재
- XMVECTOR XM_CALLCONV XMLoadFloat2(const XMFLOAT2 *pSource)
- XMVECTOR의 자료를 XMFLOATn에 저장할 때에는 다음과 같은 함수들을 사용한다.
- XMVECTOR를 XMFLOAT2에 저장
- void XM_CALLCONV XMStoreFloat2(XMFLOAT2 *pDestination, FXMVECTOR v)
- 매개변수 전달
- 처음 세 XMVECTOR 매갭ㄴ수에는 반드시 FXMVECTOR 형식을 지정해야 한다.
- 넷째 XMVECTOR 매개변수에는 반드시 GXMVECTOR 형식을 지정해야 한다.
- 다섯쨰와 여섯째 XMVECTOR 매개변수에는 반드시 HXMVECTOR 형식을 지정해야 한다.
- 그 이상의 XMVECTOR 매개변수들에는 반드시 CXMVECTOR 형식을 지정해야 한다.