본문 바로가기

예전/3D수학

(7)
[3D 수학] 평면 1. 평면이란? - 평면은 하나의 벡터 n ( 평면의 법선 벡터) 과 평면 상의 포인트 p0로 표현된다. p0이 평면상의 점일 때, p - p0로 구성된 벡터가 이 평면의 법선 벡터 n과 직각을 이룰 때, 점 p도 평면 상에 위치한다. 이므로, 이다. 정리하면, 평면의 법선 벡터 n이 단위 벡터일 경우, 로 원점에서 평면까지의 부호를 가진 가장 짧은 거리를 얻을 수 있다. 2. 포인트와 평면 공간 관계 - 위의 초록 박스 식은 평면에서 포인트의 상대적인 위치를 아는데 매우 유용하다. 평면 (n, d)가 있을 때, 포인트 p와 평면과의 관계를 알 수 있다. 3. 평면 구축 - 평면 상의 세 개의 포인트를 지정한다. 세 점 p0, p1, p2가 있다면, 평면 상의 두 개의 벡터를 구성할 수 있다. 평면 상의..
[3D 수학] 사원수(Quaternion : 쿼터니언) 1. 사원수(Quaternion : 쿼터니언)란? - 3차원 그래픽에서 회전을 표현할 때, 행렬 대신 사용하는 수학적 개념으로 4개의 값으로 이루어진 복소수(Complex Number) 체계이다.아래 글에선 사원수와 쿼터니언을 번갈아가며 썼다. (잠깐! 복소수란 현재 교육과정 중 가장 큰 범위의 수로 실수부와 허수부의 합으로 구성된 수이다.) 그렇다면, 사원수를 사용하는 이유는 무엇일까? - 사원수는 행렬에 비해 연산 속도가 빠르고, 차지하는 메모리의 양도 적으며, 결과의 질에 있어 오류가 날 확률이 적다. 3개의 축에 대한 회전 연산을 동시에 적용하는 경우에 행렬을 사용하면 한 축이 소실되는 김벌락 현상이 발행할 수 있는데, 사원수를 사용하면 이 현상을 막을 수 있다. (미리 말해두지만, 사실 이것도 ..
[3D 수학] D3DXMatrixInverse 의 이해 D3DXMatrixInverse 의 이해 ( 부제 : Direct3D 역행렬 함수의 이해) 1. 2 x 2 의 역행렬 - Direct3D에서 자주 쓰이는 4 x 4의 역행렬을 하기 전에 2 x 2 역행렬 부터 알아보도록 하자. 행렬 A가 이러할 때, 행렬 A의 역행렬은 아래와 같다. - ad - bc 라는 판별식(=행렬식)이 0이 아닐 때만 역행렬이 존재한다. 왜나하면, 판별식의 값이 0이 되면 분모가 0이 되므로 값이 존재하지 않게 된다. 2. D3DXMatrixInverse - 이것은 D3DXMatrixInverse 함수의 매개 변수들의 의미이다.2번째 행렬식의 경우 필요한 경우에 이용되며, 일반적으론 0을 전달한다. pM의 행렬식은 내부에서 따로 계산한다. 3. 역행렬을 구하는 방법 - 역행렬을 구..
[3D 수학] 3D 변환 행렬 1. 이동 - (x, y, z, 1) 벡터에 이동 행렬 T(p)를 곱하면 x축으로 Px, y축으로 Py, z축으로 Pz만큼 이동된 벡터가 나온다. Direct3D에서 사용하는 함수명은 D3DXMatrixTranslate이다. 2. 회전 - 행렬을 이용해 x, y, z축에서 벡터를 회전시킬 수 있다. Direct3D에서 사용하는 함수명은 각각 D3DXMatrixRotationX D3DXMatrixRotationY D3DXMatrixRotationZ 이다. - Direct3D는 왼손 좌표계를 사용한다. 엄지를 위로 하고 검지와 중지를 폈을 때, 엄지가 +y, 검지가 +z, 중지가 +x 축이 된다. 3. 크기 변형 - 벡터에 이동 행렬 S(q)를 곱하면 x축으로 qx, y축으로 qy, z축으로 qz만큼 크기 ..
[3D 수학] D3DX 행렬 Direct3D는 4 x 4 행렬과 1 x 4 행 벡터만을 이용한다. - Direct3D에서 4 x 4 행렬을 이용하는 이유는 이 크기를 이용해 우리가 원하는 모든 변환을 표현할 수 있기 때문이다. 이동이나 투영, 반사 등과 같은 변환은 3 x 3 행렬로는 표현할 수 없고, 우리가 작업하려는 것은 벡터와 행렬의 곱이기 때문에 변환 수행을 위한 행렬 곱 규칙에 제한을 받는다. 4 x 4 행렬로 하면 벡터, 행렬 곱을 이용한 좀 더 다양한 변환을 시도할 수 있다. - 1 x 4 행 벡터에는 포인트의 좌표나 벡터의 성분을 넣는다. 포인트나 벡터는 3D 이다. 때문에 x, y, z 세 성분은 각각의 내용을 넣고, 4번째 인자인 w 성분은 포인터인지 벡터인지 구분하는 인자가 된다. 1 x 4 행 벡터에 포인트를 ..
[3D 수학] 기본적인 행렬 - 행렬이란, matrix라고 하며, 행과 열로 이루어진 수의 배열이다.m x n 행렬은 m행과 n열을 가지고 있다. 때때로 한개의 행이나 열만을 가지는 행렬이 있는데 이를 행 벡터, 열 벡터라고 부른다. 1. 상등 - 동일한 차원을 가지고, 각각의 대응되는 항목이 같은 두 개의 행렬은 같은 것으로 보고 이를 행렬의 상등이라고 한다. 2. 스칼라 곱 - 행렬의 각 항목을 스칼라로 곱하는 방법으로 행렬과 스칼라 곱을 수행할 수 있다. 3. 더하기 - 행렬이 동일한 차원을 가진 경우에는 두 행렬을 더할 수 있다. 4. 행렬의 곱 - 행렬 A가 m x n 행렬이고, 행렬 B가 n x p 행렬일 때, A의 열 수가 B의 행 수가 같으므로 곱이 정의될 수 있다. - 행렬의 곱에서 가장 중요한 성질은 교환법칙이 성..
[3D 수학] 벡터 (Vector) 1. 벡터란? - 벡터란 크기와 방향을 가진 물리량이다.벡터는 3D 공간 상에서 방향을 표현하는데 편리한 메커니즘을 제공하기 때문에 3D에서 벡터를 사용한다. - 벡터의 위치는 벡터의 속성을 변경하지 않는다.벡터의 꼬리를 원점과 일치시키면 벡터가 표준점(Standard Point)에 위치했다고 한다. - 위치는 벡터의 속성이 아니므로 다른 위치에 있더라도 동일한 길이와 방향을 기리키는 두 벡터는 동일한 것으로 본다.위의 두 벡터 U, V는 동일한 벡터이다. - 3D에는 특별한 4개의 벡터가 있다. ① 영 벡터: 모든 성분에 0을 가지는 벡터 O = (0, 0, 0) ② x, y, z 표준 기저 벡터: 이 벡터들은 i, j, k 로 표시하며 좌표 시스템의 x, y, z축을 따라 진행하고, 모두 1의 크기를..