2.1 행렬과 벡터(Matrices and Vectors)
행렬(matrix)
행(row)과 열(column)로 구성, m개의 행과 n개의 열을 가진 행렬은 다음과 같이 표현
행렬의 크기는 m x n 으로 표기, m과 n이 같다면 정사각행렬(square matrix)이라 한다.
행렬 각 원소의 아래첨자는 그 원소의 위치를 말한다.
행렬 곱셈
A의 크기가 l x m 이고, B의 크기가 m x n 이라면, AB의 크기는 l x n 이 된다.
백터
행벡터
2차원 벡터는 (x, y), 3차원 벡터는 (x, y, z)로 표기
열백터
행렬-벡터 곱셈
전치행렬(transpose)
$M^T$로 표기
위의 행렬 M의 전치행렬은 다음과 같다.
\begin{pmatrix} a & c & e \\ b & d & f \end{pmatrix}
이는 벡터에도 그대로 적용된다. 열벡터 $v$의 원소를 행벡터로 표현하면 $v^T$가 된다.
행렬-벡터 곱셈은 다른 방식으로 표현될 수 있다. 열벡터 $v$ 대신 행백터 $v^T$를 사용하고, $M^T$의 왼쪽에 배치한다.
아래 수식은 위의 $Mv$에 $(AB)^T = B^TA^T$를 적용한 것과 같다.
OpenGL은 열벡터를 사용하고 행렬-벡터 곱셈에서 행렬의 오른쪽에 벡터를 위치시키고, Direct3D는 행벡터를 사용하고 행렬-벡터 곱셈에서 행렬의 왼쪽에 벡터를 위치시킨다.
단위 행렬(identity matrix)
정사각행렬 중, 왼쪽 위 끝과 오른쪽 아래를 잇는 대각 원소 모두 1이고 나머지 원소는 모두 0인 경우다.
$I$로 표기한다.
임의의 행렬 &M&에 대해서 다음과 같이 $MI=IM=M$이 성립한다.
역행렬(Inverse)
두 개의 정사각행렬 $A$와 $B$가 곱해져서 그 결과가 $I$가 된다면, 즉 $AB=I$ 라면, $B$는 $A$의 역행렬이라 부르고 $A^{-1}$로 표기
$(AB)^{-1} = B^{-1}A^{-1}$
정규화(normalization)
2차원 벡터 $v$의 좌표를 $(v_x, v_y)$로 표현할 때, $v$의 길이는 $\sqrt{{v_x}^2+ {v_y}^2 }$으로 정의되고 $\left\|v\right\|$로 표기
3차원 벡터 $v$의 좌표를 $(v_x, v_y, v_z)$의 길이는 $\sqrt{{v_x}^2+ {v_y}^2+{v_z}^2 }$이 된다.
벡터 $v$를 그 길이 $\left\|v\right\|$로 나누는 과정을 정규화라고 한다.
단위 벡터(unit vector)
$\frac{ v }{ \left\|v\right\| }$는 $v$와 같은 방향을 가지며 길이가 1인 벡터이다. 이를 단위 벡터라 한다.
2.2 좌표계와 기저(Coordinate System and Basis)
좌표계 = 원점 + 기저
직교정규기저는 단위 벡터들의 직교 집합이다.
2차원 좌표계에서 모든 벡터는 기저 벡터의 선형 조합으로 정의될 수 있다.
${e_1, e_2}$를 기저(basis)라고 부르는데, 주축(principal axis)에 나란하므로 특별히 표준 기저(standard basis)라고 한다.
서로 직교하는 단위 벡터이므로 직교정규(orthonormal) 성질을 가진다고 한다.
표준 기저 말고도 다양한 기저를 사용할 수 있다. 위 그림 중 우측에 해당한다.
2.3 내적(Dot Product)
두 개의 n차원 벡터 a와 b를 각각 (a_1, a_2, \cdots, a_n)과 (a_1, a_2, \cdots, a_n)으로 표현된다면, a와 b의 내적(inner product 또는 dot product)은 $a \cdot b$ 로 표기되고 다음과 같이 정의된다.
$ a \cdot b = \sum_{i=1}^{n}a_ib_i = a_1b_1 + a_2b_2 + \cdots + a_nb_n $
두 벡터 $a$와 $b$ 사이의 각도를 θ로 표기하면 $ a \cdot b $는 기하학적으로 다음과 같이 정의
$a\cdot b=||a||||b||\cos{\theta}$
- a와 b가 서로 수직이면 θ가 $90^\circ$가 되어 $a \cdot b$는 0
- θ가 예각이면 $a \cdot b$는 양수
- θ가 둔각이면 $a \cdot b$는 음수
하나의 단위 벡터를 자기 자신과 내적하면 1이 된다.
서로 수직인 벡터의 내적은 0이다.
하나의 직교정규 기저가 있을 때, 동일한 기저 벡터 간 내적은 1이고, 다른 기저 벡터 간 내적은 0이다.
이는 모든 직교정규 기저가 가지는 성질이다.
2.4 벡터곱(Cross Product)
벡터곱은 3차원에서만 정의되는 연산이다.
두 개의 3차원 벡터 a와 b의 벡터곱(cross product)은 $a \times b$로 표기
이는 a와 b에 모두 수직인 또 다른 3차원 벡터이다.
벡터곱 $a \times b$은 오른손 법칙(right-hand rule)으로 결정된다. 오른손 네 손가락이 첫 번째 벡터 a에서 두 번째 벡터 b쪽으로 감싸며 움직일 때 엄지손가락이 $a \times b$의 방향을 가리키게 된다.
$a \times b$의 길이는 a와 b에 읳해 만들어지는 평행사변형의 넓이와 같다.
$||a\times b||=||a||||b||\sin{\theta}$
$b \times a$와 $a \times b$는 서로 반대 방향을 가진다. $b \times a = -(a \times b)$가 된다. 이런 점에서 벡터곱을 반가환적이라 부른다. 물론 두 길이는 같다.
2.5 직선 및 선형보간(Linear Interpolation)
두 개의 점 $p_0$와 $p_1$을 지나는 직선을 생각해보면, $p_0$, $p_0$와 $p_1$을 잇는 벡터인 $p_1 - p_0$를 사용하여 다음과 같은 매개변수 방정식(parametric equation)으로 정의된다.
$p(t) = p_0 + t(p_1-p_0)$
t가 [-∞, ∞] 범위면 양쪽으로 무한히 뻗는 직선을 표현
t가 [0, ∞] 범위면 $p_0$에서 $p_1-p_0$ 방향으로 무한하게 뻗는 광선(ray)이 된다.
t의 범위가 유한하게 한정되면 선분을 표현
수식을 다시 쓰면
$p(t) = (1-t)p_0 + tp_1$
(1-t)와 t를 각각 $p_0$와 $p_1$에 대한 가중치(weight)로 보면, $p(t)$는 $p_0$와 $p_1$의 가중치 합(weighted sum)이 된다. 특히 t의 범위가 [0, 1]일 때, $p(t)$는 $p_0$와 $p_1$의 선형보간(linear interpolation)이라고 한다.
2차원, 3차원에서는 선형보간을 이용해 각각 다음과 같은 $p(t)$의 좌표를 얻는다.
$p_0$와 $p_1$에 특정한 값이 저장되어 있다면, 그 값들도 선형보간될 수 있다.
예를 들어 $p_0$에 $c_0$라는 색상이 저장되어 있고 그 원소를 $(R_0, G_0, B_0)$라 하자. 마찬가지로 $p_1$에 $c_1$이라는 색상이 지정되어 있고 그 원소를 $(R_1, G_1, B_1)$이라 하자.
선형 보간된 색상은 다음과 같이 정의할 수 있다.
출처
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문]을 보고 공부하고 정리한 내용
'공부 > 컴퓨터 그래픽스' 카테고리의 다른 글
OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문 Chapter 05 정점 처리 (0) | 2024.07.05 |
---|---|
OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문 Chapter 04 좌표계와 변환 (0) | 2024.06.30 |
OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문 Chapter 03 모델링 (0) | 2024.06.30 |
OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문 Chapter 01 서론 (0) | 2024.06.25 |
OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문 (0) | 2024.06.25 |