본문 바로가기

예전/3D수학

[3D 수학] D3DX 행렬



Direct3D는 4 x 4 행렬과 1 x 4 행 벡터만을 이용한다.



Direct3D에서 4 x 4 행렬을 이용하는 이유는 이 크기를 이용해 우리가 원하는 모든 변환을 표현할 수 있기 때문이다.


이동이나 투영, 반사 등과 같은 변환은 3 x 3 행렬로는 표현할 수 없고, 우리가 작업하려는 것은 벡터와 행렬의 곱이기 때문에 변환 수행을 위한 행렬 곱 규칙에 제한을 받는다. 4 x 4 행렬로 하면 벡터, 행렬 곱을 이용한 좀 더 다양한 변환을 시도할 수 있다.



1 x 4 행 벡터에는 포인트의 좌표나 벡터의 성분을 넣는다.


포인트나 벡터는 3D 이다. 때문에 x, y, z 세 성분은 각각의 내용을 넣고, 4번째 인자인 w 성분은 포인터인지 벡터인지 구분하는 인자가 된다.


1 x 4 행 벡터에 포인트를 배치할 때는 w 성분을 1로 지정해야 포인트 이동을 올바르게 동작한다. 반면 벡터는 위치를 가지지 않으므로 벡터의 이동은 정의될 수 없으며, 벡터를 이동하려는 시도는 의미 없는 벡터라는 결과를 낳는다. 따라서 벡터는 w성분에 0을 넣는다.



- 때로 행렬 변환 과정에서 벡터의 w성분을 바꿔 w가 0도 1도 아닐 때가 있다. 그것은 3D 공간 내의 벡터와는 다른 벡터가 된다.

이때 벡터의 각 성분을 w 성분으로 나누면 동치 공간의 벡터를 3D로 매핑할 수 있다.





동치 공간에서 3D 공간으로의 매핑은 3D 에서 원근 투영을 구현하는데 이용된다.




'예전 > 3D수학' 카테고리의 다른 글

[3D 수학] 사원수(Quaternion : 쿼터니언)  (4) 2012.09.12
[3D 수학] D3DXMatrixInverse 의 이해  (0) 2012.09.05
[3D 수학] 3D 변환 행렬  (0) 2012.09.03
[3D 수학] 기본적인 행렬  (0) 2012.09.03
[3D 수학] 벡터 (Vector)  (0) 2012.09.03