- 화면에서 오브젝트를 임의의 위치에 그려낼 방법
- Vertex buffer object의 Vertex position값을 매번 수정한다. -> 가능하지만 비효율적이다.
- 선형 변환(Linear transformation)을 이용한다.
- 가장 기초적이고 일반적인 방법
- 기본적인 선형대수에 대한 이해가 필요하다.
- 크기와 방향을 갖는 값
- 좌표계 상의 벡터 : 여러 차원의 좌표값으로 표현
- 덧셈 / 뺄셈 : 각 차원의 원소별로 계산 가능
스칼라 곱 : 각 차원에 스칼라 값을 곱함
벡터의 크기(길이) 계산 : 각 좌표값의 제곱근의 합의 제곱근
단위벡터(Unit Vector) : 길이가 1인 벡터
벡터의 내적(Inner produce)
- 연산자를 .(점)으로 표기하기에 Dot produce라고도 함
- 두 벡터의 길이의 곱 * cos(두 벡터의 사잇각)
- 각 차원별 좌표값의 곱의 합
- 곱의 결과는 스칼라 값
- 기하학적 의미 : 투영(projection) ,두개의 벡터중 하나가 단위벡터일 경우 단위벡터가 아닌 벡터에서 단위벡터에게 수직으로 직선을 내리면 단위벡터는 내적이 된다.
- 내적의 응용법
- 사잇각 구하기 : theta = acos(v w / (|v| |w|))
두 벡터가 수직인 경우는 내저그이 값은 0
벡터의 외적(Cross product)
- 3차원 벡터에서만 정의
- 곱의 결과도 3차원 벡터
- ex) a(길이) * b(길이) a(길이)에서 b(길이)로 향하는 방향으로 손을 감으면 엄지의 방향이 외적의 방향이다.
- 기하학적 의미
- 길이 : 두 벡터의 길이의 곱 * sin(두 벡터의 사잇각)
-> 즉, 두 벡터가 만들어 내는 평행사변형의 넓이- 방향 : 두 벡터와 수작한 벡터
-교환 법칙이 성립하지 않음
Anti - symmetric : A B = -B A
- 외적의 응용법
- 두 3차원 벡터와 수직하는 벡터 구하기
직교화(Orthogonalization)
Vector Multiplication
- 각각의 축에 대해 계산을 할때는 그 축은 계산에 포함되지 않는다.
- 행(row)과 열(column)로 이뤄진 숫자 묶음으로 구성된값
- 덧셈/뺄셈: 같은 행과 열에 위치한 원소별로 연산
- 스칼라곱 : 스칼라값을 모든 원소에 곱셈 연산
- 선형 : f(ax + by) = a f(x) + b f(y)
f(x) = A x
g(x) = B x
-> f(g(x)) = A(b x) = C x
- 표현하고자 하는 차원수보다 한차원 늘어난 벡터로 좌표를 표시하는 방법
- 마지막 원소 값을 1로 두면 '점'을 표현
- 3D좌표 (x, y, z)는 4차원 벡터 (x, y, z, 1)
- 동차 좌표계에서 (wx, wy, wz, w)는 (x, y, z, 1)과 같은 위치이다.
-> 이렇게 하는 이유
- 평행 이동을 선형 변환으로 표현할 수 있게 됨
- 원근 투영을 선형 변환으로 표현할 수 있게 됨
A i = i A = A
- 대각선의 원소값은 1, 나머지는 0 / 출력 벡터는 입력벡터와 동일해진다.
단위행렬의 끝에 기입
회전
- x축에 대한 회전
- y축에 대한 회전
- z축에 대한 회전
* 각 축에 대한 회전일 경우 그 축에는 1이 들어가있다.
- 임의의 축 (Rx, Ry, Rz)에 대한 회전
- 골드만 회전 행렬
직교 행렬(Orthogonal Matrix)
- 다음 조건을 만족하는 행렬을 Orthogonal Matrix라고 한다.
- 각 column vector(혹은 row vector)의 길이가 1
- column vector간의 내적값이 0(수직)
Inverse(A) = Transpose(A)
- Rotation matrix는 Orthogonal matrix
Combine Matrices
- 주어진 벡터를 두배로 확대한 다음 (1, 2, 3)만큼 평행이동 시키는 행렬
- 여러 선형변환을 연속으로 적용시키는 것을 행렬 곱으로 만들어진 하나의 선영변환으로 나타낼 수 있다.