도해로 알 수 있다! ARKit의 변환 이해를위한 4x4 행렬 설명

요 전날 ARKit에 대한 3D 수학이라는 기사를 썼습니다. 그 중에서도 언급하고 있습니다만, 지금 기사에서는, transform를 이해하기 위해서, 4*4 행렬에만 포커스 해 설명해 나가려고 생각합니다.

나도 처음에는 잘 알지 못했습니다. 그러나 지금은 이해할 수 있고, 좌표 변환할 때 4*4 행렬을 사용하는 편리함을 통감하고 있습니다.

4*4 행렬이란 무엇인가



행렬입니다. 이 행렬을 벡터에 곱하면 좌표를 변환할 수 있습니다. 이런 느낌의 행렬의 이미지만 먼저 기억하십시오. 3D 좌표계를 이해합시다.

3D공간상에 x축과 y축과 z축이 있고, 그 공간상의 점이 (x, y, z)
다음 그림에서는 x가 a이고, y가 b이고, z가 c로 표시되는 점 P를 나타냅니다.

image2

그러나 좌표 변환을 생각할 때 이 점만을 생각하는 것은 좋은 방법이 아닙니다.

벡터로 생각하는 것이 좋습니다.

점 P를 벡터로 생각



점 P를 벡터로 표현해 보았습니다.



원점에서 점 P로 뻗는 화살표입니다.

점 P만으로는 벡터를 표현할 수 없습니다. 왜냐하면 원점에서 뻗는 화살표가 아니라, 다른 곳에서 화살표를 늘리는 것으로 다른 크기, 방향의 벡터를 만들 수 있기 때문입니다.

이하와 같은 느낌.



벡터는 점이 아니라 방향과 크기를 포함하는 화살표입니다.

객체로 생각해 봅시다.



다음으로 다음과 같은 냄비를 생각해 봅시다.

냄비를 둘러싸는 육면체는 앞서 소개한 벡터를 사용하여 생각할 수 있습니다. 다음 이미지입니다. O와 P가 정해지면 육면체를 확정할 수 있으므로 그 육면체 안에 있는 포트의 방향과 크기를 정의할 수 있습니다.

그러면 4*4 행렬의 이야기로 돌아갑니다.

여기서 4*4 행렬을 보자.



냄비의 벡터 방향(회전)과 크기(크기)는 이 행렬의 빨간색으로 둘러싸인 부분을 사용하여 변환할 수 있습니다. 확대 축소 오리지널 크기 2배 벡터가 확대되었습니다. この左にある 4*4 행렬이, 2배의 확대를 나타내는 4*4 행렬입니다. 회전다음으로, 이 포트를 z축을 중심으로 30도 회전시키는 케이스를 생각해 봅시다. 벡터가 회전했습니다. https://ko.wikipedia.org/wiki/%E5%9B%9E%E8%BB%A2%E8%A1%8C%E5%88%97그리고 iOS 개발에서는 SceneKit의 API로 만들 수 있으므로 걱정할 필요가 ARCore Sceneform에서도 만들 수 있고, c++에도 있습니다. 기억할 필요가 없습니다. 이동여기까지 눈치채게 된 분도 있을지도 모릅니다만, 확대 축소와 회전은, 원점을 이동하지 않습니다.즉, 예 포드의 위치는 변환 전후에 변경되지 않습니다.여기 4*4 행렬의 가장 오른쪽 열이 등장합니다. 파란색으로 둘러싸인 평행 이동 부분입니다. 여기의 요소가 이동 역할을합니다. 다음과 같이 Δ로 표시된 이동량이 그대로 x, y, z 각각에 플러스되는 것입니다. 기하학적으로 생각하면 다음과 같은 이미지. 크기와 방향은 바꾸지 않고 원점만을 평행하게 이동하고 있습니다. 투영여기의 행렬 계산에 대해서는 복잡하기 때문에 생략합니다만, 이하의 행렬의 그림의 붉은 부분의 값의 변경으로 표현할 수 있습니다. 요약 마지막으로 다시 4*4 행렬을 살펴보겠습니다. 이 4*4 행렬의 무엇이 편리한가 하면, 회전과 확대 축소와 (투영)과 이동을 1개로 표현할 수 있는 것입니다. 이 행렬 안에 오브젝트에 부여하고 싶은 좌표 변환의 전부를 담을 수가 있습니다. 또, 이것은 곱해 합성할 수도 있기 때문에, O로부터 A, A로부터 B, B로부터 C와 3개의 좌표 변환이 있었다고 해도 곱하면 0에서 C의 변환 행렬을 만들 수 있다 입니다. 또 다른 기사에서, 행렬의 곱셈이나, 실제로 ARKit나 ARCore로 어느 API의 조합을 하면 좋은지 소개하고 싶다고 생각합니다. 관련 기사 ARKit을 위한 3D 수학 SceneKit에서 행렬을 곱할 때의 주의점

좋은 웹페이지 즐겨찾기