3차원 물체의 표현
: 3차원 물체를 표현하는 방법은 크게 물체 표면만 표현하는 방법과 물체 내부까지 포함하여 표현하는 방법으로 나뉜다. 그래픽에서는 물체 표면만 표현하는 방법이 주로 사용 된다.
이 방법은 경계면 표현(Boundary Surface Representation)이라 하며, 물체면을 평면 다각형의 집합으로 나타낸다. 곡면 역시 최종적으로는 아주 작은 다각형의 집합으로 표현된다.
곡면을 표현하는 평면 다각형 하나하나를 메시(Mesh), 표면 메시(Surface Mesh), 다각형 메시(Polygon Mesh), 표면 다각형(Surface Polygon) 또는 단순히 다각형(Polygon)이라 부른다.
일반적으로 표면 메시로 사용되는 다각형은 사각형 또는 삼각형이다. 그러나 사각형 메시는 삼각형 메시에 비해 정밀도가 떨어진다.
공간상에 임의의 4점을 연결하여 이루어진 면은 일반적으로 평면이 아니라 휜 면이 된다. 따라서 다각형 메시 단위로 빛을 비추어 물체면의 색상을 계산하는 렌더링 단계에서는 메시 자체를 평면으로 가정한다는 점을 고려하면 사각형 메시에서 정확한 렌더링을 기대하기는 어렵다.
다각형은 닷 여러 개의 정점으로 구성된다. 즉, 모델링 작업은 결국 정점의 위치를 정의하는 작업이라 할 수 있다.
벡터 공간
1. 스칼라
: 크기(Magnitude)만 있고, 방향(Direction)은 없는 양을 말한다.
- 교환 법칙, 결합 법칙, 역원 법칙이 성립한다.
* 역원 법칙 : 숫자 A에 어떤 수 "I" 를 곱했더니 그대로 자기 자신인 A가 된다고 했을 때, 이 I를 항등원 이라 한다. 어떤 스칼라 A에 대해서 A*B = I가 되는 B가 반듯 존재한다는 것이 역원 법칙이다.
2. 벡터
: 벡터는 크기와 방향을 동시에 지닌 것을 말한다.
- 모든 벡터 에는 역 벡터가 존재한다.
- 스칼라를 벡터에 곱할 수 있다.
: 벡터에 스칼라 2을 곱하면 벡터가 2배가 된다.
- 벡터의 합은 벡터다.
- "벡터 공간"은 "주어진 벡터로 부터 파생되는 모든 벡터의 집합"을 말한다.
3. 어파인 공간
: 위 그림의 3가지 벡터는 모두 동일한 벡터이다. 벡터는 그것이 어디에 있든지 크기와 방향만 같으면 동일하게 취급하기 때문이다. 공간상의 위치를 중시하는 기하학에서는 벡터 만으로 위치를 표시 하기가 어렵다.
여기에서 필요한 것이 점이다. 점이라는 개념을 벡터 공간에 추가하면 방향 뿐만 아니라 위치도 표시할 수 있게 된다. 이렇게 하기 위해서는 벡터 사이는 물론 점과 점, 점과 벡터 사이의 연산이 허용되어야 한다.
위 그림의 점 Q에서 점 P를 빼면 P에서 Q로 향하는 벡터 V가 된다. 즉, V = Q - P이다. Q를 좌변으로 옮기면, Q = V+P가 되며 우변이 벡터와 점 사이의 덧셈이 된다.
어파인 공간은 이처럼 점을 마치 벡터의 동족처럼 취급함으로써 벡터 공간을 확장한 것이다.
어파인 공간은 다음과 같은 3가지 연산이 가능하다.
1) 벡터와 벡터의 덧셈(뺄셈)
2) 스칼라와 벡터의 곱셈(나눗셈)
3) 점과 벡터의 덧셈(뺄셈)
1), 2)는 기존의 벡터 공간에서 가능했던 연산이고, 3)은 추가된 연산이다. 즉, 어파인 공간에서는 점과 벡터의 덧셈에 의해 어떤 점의 위치를 표시할 수 있다.
어파인 공간에서 점 P는 원점에서 점 P로 가는 벡터 P로 취급할 수 있다. 여기서 원점은 임의의 위치에 설정할 수 있다. 선분 PQ상의 점 V 역시 주어진 원점에서 점 V로 가는 벡터로 표시하면 된다.
만약 점 V가 선분의 중심점ㅇ라면 P에서 V로 가는 벡터 PV는 1/2 * (Q-P)로 표시할 수 있다.
그리고 벡터 덧셈 규칙에 의해 원점에서 직접 V로 가는 벡터는 원점에서 P로 가는 벡터와 P에서 V로 가는 벡터의 합이다. 따라서 다음과 같은 수식이 성립한다.
V = P + (1/2) * (Q-P)
점 V가 중심점이 아니라 선분상의 다른 점이라면 위 식의 (1/2) 대신 다른 값을 대입하면 된다.
이를 t라 하면, 일반적인 선분의 식은 다음과 같다.
1) V = P + t * (Q-P)
2) = (1-t) * P + t * Q (0 <= t <= 1)
식 2)에서 t=0 이면 V = P가 되고, t = 1 이면 V = Q 가 된다. 따라서 t가 0에서 1까지 가는 동안 P에서 Q까지 선분 위의 모든 점이 표시된다.
식 1)의 우변에서 (Q-P)는 벡터이다. 즉, 어파인 공간에서는 점에서 점을 빼면 벡터가 된다. 따라서 1)식의 우변은 점과 벡터의 합이고, 좌변은 점인 형태다.
즉, 어파인 공간에서는 점과 벡터를 합하면 점이 된다.
식 2)는 점과 점을 더하여 새로운 점을 계산한 것이다. 어파인 공간에서 점과 점을 더하는 연산은 무의미 하므로 허용되지 않는다. 하지만, 어파인 공간에서 점의 덧셈은 각 점들 앞의 계수 앞이 1일 때 한해서만 허용되고 그 의미를 갖는다. 이를 "어파인 합" 이라 부른다.
4. 좌표축과 좌표계
좌표계를 정의하기 위해서는 벡터의 합성을 이해할 필요가 있다. 위 그림에서 점 P 의 위치를 벡터로 표시해보자. (a)에서 점 P를 향한 벡터는 직각으로 교차하는 2개으 벡터 V1, V2의 합으로 표시할 수 있다.
P = 4*(V1) + 2*(V2)
V1, V2 처럼 자신의 합성에 의해 다른 모든 벡터를 표시할 수 있는 벡터를 기반 벡터(Basic Vector)라고 한다. 기반 벡터의 특징은 그들끼리 "선형 독립" 이어야 한다. 시각적으로 말하자면 공간상에 서로 직각으로 교차하는 벡터는 "선형 독립"이다.
기반 벡터의 수가 바로 "차원(Dimension)" 이다. 각각의 기반 벡터에 곱해지는 계수가 바로 "좌표"다. 이 경우 기반 벡터는 "좌표축"에 해당한다. 그러나 이처럼 점의 좌표를 기반 벡터의 계수로 표현하는데는 무리가 따른다. 벡터는 크기와 방향만 같으면 동일하게 취급되기 때문에 벡터의 시작점이 다른 경우 다른 좌표를 가리키는데도 동일하게 취급받기 때문이다.
따라서 벡터에 점을 추가한 "어파인 공간"이 등장한다. 어파인 공간에서는 기반 벡터의 시작위치를 한 점에 고정한다. 이것이 바로 원점이다. 이렇게 함으로써 위 그림 (b)의 p와 p`의 좌표는 구분된다.
좌표계는 원점과 기반벡터로 구성되는 프레임이다. 예를 들어 3차원 좌표계는 (r, V1, V2, V3)로 표현할 수 있다. 이 좌표계에서 벡터와 점은 다음과 같이 표현된다.
1) v = 4*(V1) + 2*(V2) + V3
2) p = r + 4*(V1) + 2*(V2) + V3
1)식은 원점 위치에 영향을 받지 않는다. 반면 2)식은 임의의 점 r로 부터 출발한 점 P를 향한 벡터이다. 점 r이 원점 위치에 따라 다른 좌표를 갖게 되므로 원점에 따라 영향을 받는다.
따라서 2)식은 위 그림(C)의 점 r로 가는 벡터와 r에서 p로 가는 기반 벡터 조합을 합성한 것이다.
5. 동차 좌표
: 벡터와 점을 표현할때 차이점이 한가지 있다. 벡터는 시작점이 중요하지 않다. 방향과 크기만 같은면 같다고 간주하기 때문이다. 하지만 점은 시작점이 중요하다. 점을 표현하는 벡터식이 같더라도 시작점이 다르면 서로 다른점을 나타내기 때문이다.
이러한 불편함을 해소하기 위해 사용하는 것이 "동차 좌표(Homogeneous Coordinates)" 이다.
이는 3차원 좌표를 3개의 요소로 표시할 것이 아니라 차원을 하나 올려서 4개의 요소로 표현 하자는 것이다.
1) v = 4*(V1) + 2*(V2) + V3 + 0*r
2) p = 4*(V1) + 2*(V2) + V3 + 1*r
위 1)식 처럼 마지막 요소가 0(r*0)이면 벡터 2)식처럼 마지막요소가 0이 아니면(r*1) 점을 의미하도록 한것이다.
수학적으로 보면 3차원에서 4차원으로의 사상(Mapping)이다. 이를 3, 4차원 상에서는 이해하기 어려우니 2, 3차원으로 생각해보자.
2차원 평면상의 점 (1, 2)를 동차 좌표로 표시하면 (1, 2, 1)이 된다. 이를 3차원으로 말하면 위 그림과 같이 z 축으로 높이 1의 위치에 있는 점에 해당한다.
엄밀히 말하면 2차원 평면상의 점을 3차원 공간상의 직선으로 사상한 것이 동차 좌표이다. 다시 말해서 원점에서 출발하여 (1, 2, 1)을 통과하는 직선상에 놓인 모든 3차원 좌표가 2차원 상에서는 동일한 점 (1, 2)로 사상(mapping)된다. 즉, (1, 2, 1) = (3, 6, 3) = (4, 8, 4) 모두 (1, 2)에 사상 된다는 것이다. z값으로 x, y값을 나누면 된다.
이 방식은 투영(projection)에서 유용하게 사용 된다. 3차원 공간에 있는 물체를 2차원으로 투영 시킬때 (1, 2, 1), (3, 6, 3)에 있는 두 점은 3차원 공간에서는 다른 점이지만 2차원 공간에 투영되면 겹쳐서 하나의 점으로 투영된다.
'영상 처리 프로그래밍' 카테고리의 다른 글
[컴퓨터 그래픽스] 모델변환, 시점변환 (0) | 2017.11.23 |
---|---|
[컴퓨터 그래픽스] 기하 변환 (1) | 2017.11.23 |
[컴퓨터 그래픽스] OpenGL 기본(2) (0) | 2017.11.22 |
[컴퓨터 그래픽스] OpenGL 기본(1) (0) | 2017.11.22 |
[컴퓨터 그래픽스] Introduction (0) | 2017.11.22 |