2024. 4. 17. 02:31ㆍ공부
GeoMetry(지오메트리)란?
지오메트리는 그래픽스에서 기하학적 모양을 다루는 핵심 개념이다.
또한 객체와 n차원 간의 관계 에대한 연구이기도하다. 일반적으로 그래픽스에서는 객체는 3차원에서 존재하며 지오메트리도 3차원에 대해서 다룹니다.
3차원 지오메트리를 보다 정교한 객체를 구축할 수 있는 최소 기본 요소 집합은 3가지 기본요소가 존재한다.
1.points(포인트)
공간에 대한 위치.
2.Scalars(스칼라)
두점사이의 거리같은 수량을 정하기위해서 사용한다.
Ex) Real Number(실수), Complex Numbers(복소수)
3.Vectors(벡터)
방향(direction)과 크기(magnitude)를 가진 임의의 수
Ex) Velocity(속도) Force(힘)
위의 세가지중 우선 벡터에 대해서 알아보겠다.
벡터에는 4가지 특징이 존재하는데 특징들은 아래와 같다.
1. 모든 벡터는 역(inverse)를 가지고있다. - 크기는 동일하지만 반대 방향을 가르킨다.
2. 모든 벡터는 스칼라에 의해 곱해질수 있다.

3. 영(zero)벡터 - 크기를 가지지않고, 방향이 정해지지 않았다.
4. 두벡터의 합은 벡터다.

또한 벡터는 방향과 크기가 동일한경우 어느곳에있든지 동일한 벡터로 간주한다.
일반적인 수학적 관점으로 보았을때는 벡터와 스칼라를 표현하는 영역은 아래그림과 같다.

그림처럼 Euclidean(유클리디안)영역이 크게 감싸고있고, 그안으로 Linear(선형) Vector(벡터)영역, Scalar 영역이 들어가있는 형태다.
이 말은 Scalar 영역에서 사용한 연산, 혹은 Entity 들을 Vector, 그리고 Euclidean 영역에도 포함되어있다.
예를 들어 Scalar 영역에서 Scalar에 대한 덧셈이 가능하다면, Vector영역에서도 마찬가지로 Scalar에 대한 덧셈이 가능하다는것이다.
각영역들의 연산은 아래와같다.
1. Scalar 영역
Scalar + Scalar(addition), Scalar x Scalar(multiplication)
2. (Linear) Vector 영역
Scalar 영역의 모든연산, Vector + Vector(addition), Vector x Scalar(multiplication)
3. Euclidean 영역
Scalar,Vector 영역의모든연산, 크기 측정 혹은 거리 측정
**각 영역들에서 나눗셈을 표기하지않은 이유는 나눗셈의 경우 역수를 취한 곱셈이기때문에 따로 작성하지않았다.
하지만, 위의 영역으로 그래픽스에서 기하학(Geometry) 적으로 표현 할고자 할때는 크나큰 문제가 발생한다.
바로 벡터와 스칼라만으로는 무언가를 그릴수없기 때문이다.
벡터의 경우, 우리가 이해하기위해 본래는 보이지않는 벡터를 그저 뻗어나가는 선으로 시각화 한것뿐이기 때문이다.
다시한번 위에서 적어놓은 벡터의 정의와 그에대한 예시를 확인해보자.
Vectors(벡터)
방향(direction)과 크기(magnitude)를 가진 임의의 수
Ex) Velocity(속도) Force(힘)
그렇다 벡터는 속도나 힘같이 눈에 보이지는 않지만 무언가를 움직이는 힘이 작용할뿐, 물체를 표현할수있는 것은 아니다.
그러면 물체를 표현하기 위해서는 무엇이 필요할까?
가장 기본적인 요소는 바로 점(Point)라고 생각한다.
점 과 점이 모여 선이되고 그 선들이모여 평면이 되며, 그 평면들이 모여 입체를 구성하게 된다.
이러한 이유로 수학적인 개념에서 입체를 표현하기위해 기본단위인 점을 포함한 Affine(아핀)공간을 정의하게 된다.

Affine 영역에서는 점을 새로 정의하게 되며,
기존의 Scalar 영역과 Vector 영역에서 사용하는 연산과 새롭게 Point + Vector(addition), Point - Point(subtraction)이 추가된다.
** Point + Point (addition), Point x Scalar(multiplication) 연산은 불가능하다
Affine 영역에서는 벡터와 점을 함께 사용하여, 공간에대한 점의 위치, 하나의 점이 벡터만큼 이동한 위치를 표현할수있게된다.
영역내 연산의 특징은 점이 이동한 방향,크기를 구하고자할때는 점 사이의 뺄셈(subtraction)을 수행하여 구하고 결과값은 벡터가 나오게된다. 이때, 주의해야할점은 이동한 점에서 이동하기 이전의 점을 빼야한다는 것이다.
반대로 이동한 점의 위치를 구하고자 할때는 이동하고자하는 방향과 크기(벡터), 현재 위치(점) 간의 덧셈(addition)을 수행하여 이동한 점의 위치를 구한다. 결과값은 점(Point)가 나오게된다.

이렇게 하나의 점에서 벡터의 방향을 따라 크기만큼 이동했을때의 점 P(a) 까지의 집합을 선(Line)이라고한다.
Plane(평면)
위에서 정의한 점과 벡터를 가지고 무엇을 할수있을까? 바로, 선을 긋고 평면을 표현할수있게된다.
Affine 영역에서 평면은 하나의 점과 두개의 벡터 혹은 세개의 점으로 구성된다.
Dot Products(내적)
평면을 구성하게 되면 벡터의 길이(크기)를 구하거나, 두벡터사이의 각도를 구하고자 하는일 발생하게된다.
이럴때 내적을 구해 사용하게 된다.
내적의 공식은 다음과 같으며, 이를 수시으로 나타내면 아래와 같다.
내적 공식 : x⋅y=∣x∣⋅∣y∣⋅cos(θ)

내적의 값은 Scalar 값이며, 이때 내적의 값이 0인경우 두벡터는 수직, 음수인경우 둔각, 양수인경우 예각 이다.
Cross Products(외적)
외적은 법선 벡터(normal vector)를 구할때 주로 사용된다. 법선벡터는 평면의 두개의 벡터 모두에 수직인 벡터로 이를 알고있으면, 물체의 회전중 회전축 찾거나, 평면의 방향을 결정할때 사용된다.
공식은 아래와 같다.


선형적인 관점에서는 위와같은 개념으로 이루어진다. 하지만 3차원 벡터공간(기하학적)에서는 다르게 표현하게 된다.
좌표계 시스템(Coordinate System)
좌표계시스템은 3차원 벡터 공간에서 이루어지며, 선형적 관점에서는 v= a1v1 + a2v2 + a3v3 로표현된다.
여기서 a는 Scalar 값이고 v는 벡터값이다. 또한 v는 기저벡터다. 좌표계시스템에서는 값들은 열단위 행렬로 표기된다.

** 기저벡터 : 벡터 공간에서 각각의 축방향을 가리키는 단위 벡터
예를 들면 이곳에 (2, 4, 7) 값을 가지는 벡터 v 가 있다고 가정하자. 선형적으로 표현하게 될경우,
v = 2v1 + 4v2 + 7v3 가될것이다. 이를 좌표계시스템에 맞게 변환하게 되면 아래그림과 같이 변환된다.

좌표계 시스템은 벡터의 경우 간결하게 표현할수있게 되었지만, 점을 표기하기에는 부족하다.
그렇기에 affine 영역에서의 좌표계시스템은 기준이되는 하나의 점(원점)을 추가하여 기저벡터가 틀을 형성할수있게한다.

원점이 형성된 좌표계시스템에서 벡터와 점의 수식은 보다 일반적인 표현이다.


또한 이때 사용되는 좌표계 변환에는 이동, 회전, 크기조절등 다양한 변환을 일괄적인 방식으로 처리하기위해서 새로운 값이 추가됩니다. 기존의 좌표계가 x,y,z 로 3개의 변수를 가지고있었다면 여기에 w가 추가되어 4차원 행렬이 된다.
w는 좌표계에 직접적으로 나타나진 않지만, 값을 통해 해당 좌표계가 벡터인지 점인지를 구분한다.
0인경우 벡터, 0이 아닌경우 점이다. 여기서 0이아닌경우라고 표기하는 이유는 w값이 1인경우 아닌 상황이 있으며, 이런경우에는 모든 값을 w로 나누어 정규화 시켜주어야 한다.


이를 통해 벡터와 점을 행렬로 변환하더라도 벡터와 점을 구분할수있게된다.
Homogeneous Coordinate(동차 좌표계) in Graphics
동차 좌표계는 모든 컴퓨터 그래픽 시스템의 핵심이며, 모든 표준변환(Rotation, Translation, Scaling)을 구현할수있다.
또한 동차 좌표계는 4x4 행렬로 동작하며, 하드웨어 파이프라인은 4차원 표현으로 작동한다.
OrthoGraphic(직교) 시점에서는 위에서 확인한것처럼 w가 0인경우 벡터, w가 0이아닌경우 점으로 구분한다.
Perspective(원근법적) 시점에서는 Perspective division(원근법적 구분)이 필요하다.
- 공부하며 배운것을 정리하면서 작성하는 글입니다. 틀린부분은 언제든지 지적해주시기 바랍니다!
'공부' 카테고리의 다른 글
| [파이썬] 내가보려고 정리하는 파이썬 : Numpy (0) | 2024.04.20 |
|---|---|
| [그래픽스]Viewing (1) | 2024.04.19 |
| [그래픽스]02-1. 그래픽 처리과정2 (0) | 2024.04.14 |
| [그래픽스]02. 그래픽스 처리과정 (0) | 2024.04.14 |
| [그래픽스]01. 그래픽스란? (1) | 2024.04.14 |