2. 회전
- 행렬을 이용해 x, y, z축에서 벡터를 회전시킬 수 있다.
Direct3D에서 사용하는 함수명은 각각
D3DXMatrixRotationX
D3DXMatrixRotationY
D3DXMatrixRotationZ 이다.
- Direct3D는 왼손 좌표계를 사용한다. 엄지를 위로 하고 검지와 중지를 폈을 때, 엄지가 +y, 검지가 +z, 중지가 +x 축이 된다.
3. 크기 변형
- 벡터에 이동 행렬 S(q)를 곱하면 x축으로 qx, y축으로 qy, z축으로 qz만큼 크기 변형된 벡터가 나온다.
Direct3D의 함수명은
D3DXMatrixScaling 이다.
4. 변환 조합
- 앞서 기본적인 행렬 포스팅에서 3D에서 행렬을 사용하는 이유에 대해 보았다. 다시 한번 보자면,
위와 같다.
1번은 위의 이동, 회전, 크기 변환 행렬을 통해 보였다.
2번은 지금부터 할 변환 조합이다.
행렬의 곱은 여러 행렬을 곱해 하나의 행렬로 표현할 수 있다. 다만, 행렬의 곱은 교환 법칙이 성립하지 않으므로 이를 주의한다면
유용하게 사용할 수 있다.
문제를 통해 변환 조합의 활용도를 보자.
위 문제를 요약 하면,
모든 축으로 1/5 크기만큼 축소, y축으로 45도 만큼 회전, (1, 2, -3) 만큼 이동이 된다.
이 문제를 푸는 데는 2가지 방법이 있다.
첫 번째, 벡터에 하나씩 행렬을 곱하는 방법을 보겠다.
먼저 p에 크기 변형 행렬 S를 곱하면, p'가 나온다.
p'에 y축 회전 행렬 Ry를 곱하여 p''를 만든다.
p''에 이동 행렬 T를 곱한후 p'''를 만든다.
이 p'''가 최종적인 결과물이다.
이 간단한 크기 변형, 회전, 이동을 하는 데만 행렬 곱셈의 연산이 3번이 들어갔다.
벡터 하나를 변환하는데 이런 정도의 연산이 들어간다면, 후에 복잡한 메쉬를 변환할 땐 얼마나 많은 연산이 필요할까?
이것이 바로 행렬을 3D에서 사용하는 이유다.
두 번째, 여러 변환을 하나의 행렬로 결합이 가능하다.
위에 나온 SRyT행렬을 순서대로 곱하여 하나의 변환 행렬 Q를 만들었다.
이를 벡터 p와 곱하면
위와 같다.
결과적으로 벡터 p에 행렬을 하나 하나 씩 곱하나, 행렬을 하나의 행렬로 만든 후 벡터 p에 곱하나 같은 값이 나온다는 것을 의미한다.
이와 같은 작업 방식은 벡터, 행렬 곱 연산 수를 획기적으로 줄여줘 3D 변환에 매우 유용하다.
'예전 > 3D수학' 카테고리의 다른 글
[3D 수학] 사원수(Quaternion : 쿼터니언) (4) | 2012.09.12 |
---|---|
[3D 수학] D3DXMatrixInverse 의 이해 (0) | 2012.09.05 |
[3D 수학] D3DX 행렬 (0) | 2012.09.03 |
[3D 수학] 기본적인 행렬 (0) | 2012.09.03 |
[3D 수학] 벡터 (Vector) (0) | 2012.09.03 |