[게임프로그래밍] 3차원 변환행렬, View 행렬

라멘커비·2024년 3월 20일
0

DirectX 2D

목록 보기
1/24

행렬곱으로 계산하게 되는데 크자이공부 순서로 곱해져야 한다. 순서가 달라지면 결과 달라질 수 있음.

항등행렬은 교환법칙이 성립하게 만드는 행렬이다. 무조건 항등행렬로 만들어 놓는 것을 원칙으로 한다.

어떤행렬 X 항등행렬 = 어떤행렬
항등행렬 X 어떤행렬 = 어떤행렬

행렬 == 차원이자 공간.
(내가 바라보는 공간, 카메라가 바라보는 공간, 캐릭터의 공간, ... )


공간을 정의하는 것은 크기, 회전, 위치이다.
이미 항등행렬에도 크기, 회전, 위치가 다 들어가있는 상태다. 3차원 변환행렬임!

3차원 변환행렬

크기행렬

크기행렬에 해당하는 해당하는 곳의 값을 바꿔서 곱하면 그만큼 크기에 영향을 주게 된다.

아래 사진에서 네모박스를 회전시켜 봤을 때 당연하게도 더 넓은 면적으로 보인다. 회전이 우리 눈에 보이는 크기에 영향을 미치는 것을 알 수 있다. -> 크기행렬은 회전행렬에 포함되어 있다.

회전행렬

Z축 기준 회전 '코시시코' 직접 계산 예시

이게 사실 회전행렬 곱하는 것과 같은 식임.

  • 회전행렬 계산 예시

(Z축 회전예시)

  • 회전행렬은 수직인 3개의 축(벡터)의 모임임. 축 2개만 알아도 이 규칙이 적용되는 나머지 한 축을 알아낼 수 있음.
  • 회전행렬은 그 자체로 플레이어의 방향이 됨

이동행렬(위치행렬)

W값 의미

{50, 50, 0, 0} 만큼 이동시킬 때

  • W가 0일 때 (주황색이 위치행렬 부분)

    50 + 0 + 0 + 0 = 50
    이동시킨 X값이 50이 된다.

  • W가 1일 때 (주황색이 위치행렬 부분)

    50 + 0 + 0 + 100 = 150
    이동시킨 X값이 150이 된다.

View 행렬

View 행렬(뷰행렬)은 카메라 행렬을 의미한다. WinApi때의 카메라랑 크게 다를 건 없는데 회전을 할 수 있다.
뷰행렬의 역할은 "어떤 카메라가 어떤 물체들을 보고 있다"를 만들어 내는 것이다.
즉 뷰 행렬 역할은 카메라를 원점이 되도록, 세상의 기준이자 중심이 되도록 하는 것이다.

카메라가 기준되어
카메라의 위치가 0,0,0
카메라의 회전이 0,0,0 이 되게 하는 행렬이다.

모든 것들이 카메라를 기준으로 공전하게 됨

로컬 스페이스 -> 월드 스페이스 -> 뷰 스페이스 중에

  • 월드 스페이스 -> 뷰 스페이스

카메라 뒤쪽 즉, Z값이 음수인 곳은 안 보여도 되는 부분들이 된다.
(로컬 스페이스는 매쉬를 생각하면 된다)

카메라 회전

그래서 카메라 45도 돌아있다면 뷰행렬은 카메라를 회전하지 않은 상태로 만드는 것이 첫번째다. 카메라를 포함해서 나머지도 모두 -45도 돌아가게(공전하게) 만들면 된다.

그리고 그 역방향의 회전행렬을 구하는 것은 쉽다. 전치 행렬을 만들면 된다. 기존 회전행렬의 반대되는 회전행렬을 만들면 된다.

  • 90도, -90도 회전


    서로 전치행렬이다!
profile
일단 시작해보자

0개의 댓글