LabHub
배우기 러닝패스 코스

3D 수학과 소프트웨어 래스터라이저 · 벡터와 행렬 · 실습

벡터·행렬 연산을 직접 만든다

LabHub 에서 이어서 보기

목표

3차원 벡터 연산과 4x4 행렬 곱을 직접 만들고, 그것으로 도형을 옮기고 돌리고 줄여 봅니다. 이 실습이 끝나면 변환 행렬을 읽고 쓸 수 있고, 곱하는 순서가 왜 중요한지 손으로 확인한 상태가 됩니다.

왜 중요한가

3차원 계산인데 행렬이 4x4 인 이유는 이동이 곱셈이 아니기 때문입니다. 좌표를 하나 늘려 (x, y, z, 1) 로 적으면 마지막 열이 그 1 과 곱해져 결과에 더해지고, 그렇게 평행이동이 곱셈 안으로 들어옵니다. 이것을 동차 좌표라고 하고, w 가 1 이면 점, 0 이면 방향이라는 구분이 여기서 나옵니다.

그리고 행렬로 표현해 두면 여러 변환을 미리 곱해 하나로 만들 수 있습니다. GPU 가 정점마다 MVP 행렬 하나만 곱하는 이유입니다. 다만 행렬 곱은 교환법칙이 성립하지 않아서, 순서를 바꾸면 물체가 제자리에서 도는 대신 궤도를 돕니다. 이 차이를 숫자로 한 번 보고 나면 잊히지 않습니다.

단계

1. /root/linalg/gfxlib.py 도구 상자를 놓습니다.
2. /root/linalg/vec.py 에 벡터 연산 일곱 개를 만듭니다.
3. /root/linalg/mat.py 에 4x4 행렬 곱을 만듭니다.
4. /root/linalg/xform.py 에 이동·크기·회전 행렬을 만듭니다.
5. 곱하는 순서를 바꾼 결과를 /root/linalg/out/05-order.txt 에 적습니다.
6. 변환한 사각형 셋을 /root/linalg/out/square.png 에 그립니다.
7. 외적으로 법선과 넓이를 구해 /root/linalg/out/07-normal.txt 에 적습니다.

참고

단계 7개

  1. 그리기 도구 상자를 놓는다
  2. 3차원 벡터 연산
  3. 4x4 행렬 곱
  4. 이동·크기·회전 행렬
  5. 곱하는 순서가 결과를 바꾼다
  6. 변환한 사각형을 그린다
  7. 외적으로 법선과 넓이를 구한다