행렬(Matrix) 스터디 - 개요, 기초, SRT(Scale, Rotation, Translation) 변환 행렬
행렬에 대한 스터디 노트
항등행렬 (Identity Matrix)
주어진 행렬과 곱했을 때 아무 변화도 주지 않는 정사각 행렬.
역행렬 Inverse Matrix)
곱했을 때 항등행렬이 되는 역할을 하는 행렬. 우측 상단에 -1 로 표기.
전치행렬 (Transpose Matrix)
원래 행렬의 행과 열을 바꾼 새로운 행렬. 우측 상단에 T 로 표기. (Transpose)
직교행렬 (Orthogonal Matrix)
행렬의 행끼리 또는 열끼리 서로 수직(직교)하고 크기가 1인 행렬.
(직교행렬의 역행렬은 전치행렬과 같다)
A 1x4 행렬과 B 4x4 행렬의 곱셈
C[1,1] = A[1,1]*B[1,1] + A[1,2]*B[2,1] + A[1,3]*B[3,1] + A[1,4]*B[4,1]
C[1,2] = A[1,1]*B[1,2] + A[1,2]*B[2,2] + A[1,3]*B[3,2] + A[1,4]*B[4,2]
C[1,3] = A[1,1]*B[1,3] + A[1,2]*B[2,3] + A[1,3]*B[3,3] + A[1,4]*B[4,3]
C[1,4] = A[1,1]*B[1,4] + A[1,2]*B[2,4] + A[1,3]*B[3,4] + A[1,4]*B[4,4]
결과 행렬 C는 1x4 크기의 행렬
SRT 행렬 알아보기.
Translation
동차 좌표계(Homogenous coordinate)
[x, y, z, w]
Translation Matrix
| 1 0 0 0 |
| 0 1 0 0 |
| 0 0 1 0 |
| dx dy dz 1 |
[x, y, z, w] * | 1 0 0 0 | | x*1 + y*0 + z*0 + w*dx |
| 0 1 0 0 | | x*0 + y*1 + z*0 + w*dy |
| 0 0 1 0 | * | x*0 + y*0 + z*1 + w*dz |
| dx dy dz 1 | | x*0 + y*0 + z*0 + w*1 |
Scale
Sacle 행렬은 mx, my, mz, 1 이 결과로 나오면 됨.
| Sx 0 0 0 |
| 0 Sy 0 0 |
| 0 0 Sz 0 |
| 0 0 0 1 |
Rotation
각 축에 대한 행렬을 각각 구한다.
순서대로
X축 기준 회전 행렬
Y축 기준 회전 행렬
Z축 기준 회전 행렬.
R_x(theta) = | 1 0 0 0 |
| 0 cos(theta) -sin(theta) 0 |
| 0 sin(theta) cos(theta) 0 |
| 0 0 0 1 |
R_y(theta) = | cos(theta) 0 sin(theta) 0 |
| 0 1 0 0 |
| -sin(theta) 0 cos(theta) 0 |
| 0 0 0 1 |
R_z(theta) = | cos(theta) -sin(theta) 0 0 |
| sin(theta) cos(theta) 0 0 |
| 0 0 1 0 |
| 0 0 0 1 |
행렬 연산 순서
스자이공부
스케일, 자전, 이동, 공전, 부모행렬(부모변환)
참조
선형대수학 : https://ko.wikipedia.org/wiki/%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98%ED%95%99
행렬 : https://ko.wikipedia.org/wiki/%ED%96%89%EB%A0%AC
삼각함수의 덧셈정리
sin(α±β) = sinα cosβ ± cosα sinβ
cos(α±β) =cosα cosβ ∓ sinα sinβ
.
<리얼-타임 렌더링(REAL-TIME RENDERING) 4/e> 구입 링크
https://link.coupang.com/a/8VWas
<DirectX 12를 이용한 3D 게임 프로그래밍 입문> 구입 링크
https://link.coupang.com/a/8V4Wq
유니티 에셋 스토어 링크
https://assetstore.unity.com?aid=1011lvz7h
(링크를 통해 도서/에셋 구입시 일정액의 수수료를 지급받습니다.)