http://blog.naver.com/oranke?Redirect=Log&logNo=40000788158 에서 일부 내용을 추려옵니다
뷰변환 행렬에 대해 살펴보기 전에 짚고 넘어가야 할 문제가 있습니다. OpenGL과 D3D를 말할 때 가장 큰 차이점으로 오른손 좌표계냐 왼 손 좌표계냐를 따집니다. 그리고 또 하나 얘기하는 것이 바로 행기준 행렬이냐 열기준 행렬이냐는 것이죠...
좌표계 문제는 Z좌표를 뒤집기만 하면 끝납니다. 앞에서 살펴봤던 회전행렬 역시 오른손 좌표계가 오른손 법칙으로 양의 방향을 규정하는 것 처럼 왼손 좌표계는 왼손이 감기는 방향을 양의 방향으로 하기 때문에 회전행렬을 그대로 쓸 수 있습니다. 양의 방향에 해당하는 좌표평면과 축을 2차원에 설정해 그려보면 금방 알 수 있습죠...
[출처] [산수 02] 행기준 행렬과 열기준 행렬 |작성자 오랑캐꽃
OpenGL에서 사용하는 열기준 행렬과 D3D의 행기준 행렬이란 녀석들은 확실하게 그 차이를 이해해 두지 않으면 두고 두고 뒤통수를 맞게 됩니다.
참고로 양키들은 행기준 행렬(Row major matrix) 의 곱셈을 프리멀티플리케이션(Pre-multiplication), 열기준 행렬(Column major matrix) 의 곱셈을 포스트멀티플리케이션(Post-multiplication) 이라고 구분해서 쓰더군요.
아무튼 우리가 일반적으로 사용하는 행기준 행렬은 아래처럼 정의되고,
A(Row) = | a00 a01 a02 a03 |
| a04 a05 a06 a07 |
| a08 a09 a10 a11 |
| a12 a13 a14 a15 |
OpenGL 레퍼런스에 따르면 열기준 행렬은 다음과 같이 생겨먹었습니다.
A(Col) = | a00 a04 a08 a12 |
| a01 a05 a09 a13 |
| a02 a06 a10 a14 |
| a03 a07 a11 a15 |
[출처] [산수 02] 행기준 행렬과 열기준 행렬 |작성자 오랑캐꽃
행기준 변환행렬 A에 의해 절점 P(x,y,z,w) 가 새로운 절점 P'(x',y',z',w') 로 변환하는 과정을 살펴보죠. 고등학교 때 배웠듯이 행렬의 곱셈이 성립하려면 행과 열의 갯수가 같아야 하므로 다음과 같이 적어줍니다. (행렬의 어떤 요소끼리 곱하는지 손가락으로 짚으면서 보세요.)
| x' y' z' w' | =
| x y z w | × | a00 a01 a02 a03 |
| a04 a05 a06 a07 |
| a08 a09 a10 a11 |
| a12 a13 a14 a15 |
x' = x*a00 + y*a04 + z*a08 + w*a12
y' = x*a01 + y*a05 + z*a09 + w*a13
z' = x*a02 + y*a06 + z*a10 + w*a14
w' = x*a03 + y*a07 + z*a11 + w*a15
원래 열기준 행렬은 절점, 또는 벡터를 표현하는 행렬을 세로, 즉 열로 표현하기 위해 사용합니다. 벡터 V(x,y,z,w) 에 변환행렬이 적용된 새로운 벡터 V'를 계산하는 과정을 열기준 행렬로 표현할 때는 다음과 같이 적어 줍니다.
| x' | | a00 a04 a08 a12 | | x |
| y' | = | a01 a05 a09 a13 | × | y |
| z' | | a02 a06 a10 a14 | | z |
| w' | | a03 a07 a11 a15 | | w |
풀어보면 다음과 같습죠. (손가락을 짚으면서 보세요.)
x' = a00*x + a04*y + a08*z + a12*w
y' = a01*x + a05*y + a09*z + a13*w
z' = a02*x + a06*y + a10*z + a14*w
w' = a03*x + a07*y + a11*z + a15*w ... ①
비교해 보나 마나 같은 결과 입니다.
OpenGL에서는 ① 에서의 방법으로 행렬을 표시하고 곱해주네요
'수학 (Mathematics) > 3D수학' 카테고리의 다른 글
근사 편미분 파동방정식, 경계 범위 식구하기 (0) | 2013.02.22 |
---|---|
행렬에 정규직교 단위벡터3개를 세팅하는 방법과 활용 (0) | 2013.01.11 |
기초 : 오브젝트 법선벡터 추리기 : Backface Culling (0) | 2013.01.01 |
카메라 클래스 - 쿼터니온 (0) | 2012.11.18 |
두개의 복소수 곱 => 두 복소수의 크기만큼이 각 두 복소수의 회전 만큼이 더해진각도가 회전된 것 (0) | 2012.11.02 |