DirectX 에서는 벡터를 변환하는 함수인
1 2 3 4 5 | D3DXVECTOR3* WINAPI D3DXVec3TransformCoord ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV, CONST D3DXMATRIX *pM ); D3DXVECTOR3* WINAPI D3DXVec3TransformNormal ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV, CONST D3DXMATRIX *pM ); | cs |
함수가 있다.
일단 이 두함수의 공통점은 2번째 인자인 벡터와 3번째 인자인 행렬을 곱하는 함수라는 것이다.
우선 3차원 벡터와 4x4 행렬은 곱해질 수 없다 왜냐하면 행렬을 곱할때는 앞 행렬의 열과 뒤 행렬의
행이 같아야지만 곱할 수 있다.
그래서 이 함수는 3차원 벡터를 4차원 벡터로 변환하여 행렬과 곱해주는데 여기서 차이점이 발생한다
3차원 벡터 가 있다면
이 3차원 벡터를
D3DXVec3TransformCoord 함수는
로 바꿔주고
D3DXVec3TranformNormal 함수는
로 바꿔준다.
둘의 차이는 4차원 벡터의 4번째 요소 가 다르다는 점인데
이라면 포인터(좌표) 개념이 되어 이동이 적용되고
이라면 벡터의(방향) 개념이 되어 이동이 적용되지 않는다
이유는
DirectX 의 4x4 행렬의 마지막 열은 이동을 담당하는것을 알고 있다면 이해하기 쉽다
------------------------------------------------------------
이 식에서
이라면
이므로 이동이 적용되는걸 알 수 있다.
이라면
이므로 이동이 적용 안되는 걸 알 수 있다.
-------------------------------------------------------------
그러므로
벡터와 행렬을 곱하여
이동, 회전, 스케일, 을 변환하고 싶다면 D3DXVec3TransformCoord를 쓰고
이동은 변환하고싶지 않고 회전,스케일만 변환하고 싶다면 D3DXVec3TransformNormal을 쓰면된다
'programing > directX' 카테고리의 다른 글
LPD3DXMESH 쓰는법 (0) | 2018.10.13 |
---|---|
LPD3DXFONT (0) | 2018.02.13 |