관리 메뉴

Kim's Programming

3차원 그래픽스 투영의 종류 본문

Computer Theory/Computer Graphics

3차원 그래픽스 투영의 종류

Programmer. 2016. 1. 24. 19:36

투영의 종류


투영방식은 상대적인 크기가 유지되는 평행투영(Parallel Projection)과 거리에 따라 크기가 다르게 투영되는 원근투영(Perspective Projection)으로 구분됩니다.


평행투영(Parallel Projection)





평행투영에서는 3차원 객체를 2차원 평면인 투영면에 일정한 각도로 투영을 시키며, 이 경우 모든 투영선이 평행이므로 원래 객체들 간의 상대적인 크기가 그대로 유지됩니다. 평행투영은 직각투영, 등축투영, 경사투영으로 분류됩니다.


1) 직각 투영(Orthographic Projection)


직각 투영은 3차원 공간의 좌표계에서 x, y, z축 가운데 한 축과 투영방향이 동일하고 투영면은 이 축과 직각이 되도록 배치하여 투영하는 방법을 의미합니다. 직각투영은 처리과정에서 변환과정이 매우 간단한것이 특징입니다. z축방향으로 직각투영 할 경우 z좌표값만 0으로 바꾸면 끝납니다.


2) 등축 투영(Axonometric Projection)


대표적인 등축투영 방식인 삼축투영 (Isometric Projection)에서는 투영면이 각 축의 방향으로 같은 거리에 위치 하고 이 평면에 직각방향으로 투영을 합니다.투영면은 x+y+z+c=0인 평면이 되고 모든 투영선은 x=y=z벡터와 평행이 됩니다.


3) 경사 투영(Oblique Projection)

경사 투영은 투영 방향과 투영면이 직각방향이 아니고 일정한 다른 각도를 이루고 있는 경우 입니다. 경사 투영에서는 45도 또는 60도인 경우가 많이 사용되며 투영결과에서 상대적 크기는 유지됩니다.



원근(Perspective Projection)





원근투영에서는 평행푸영에서와는 다르게 평행을 이루지 않고 투영면에 직각방향으로 투영이 되지 않습니다. 평행투영에서는 하나의 시점에서 3차원 객체를 바라본 모습이 투영면에 나타나므로 모든 투영선이 시점에 모이게 됩니다. 원근투영을 이용하면 시점에서 멀리 떨어져 있는 객체는 작게 투영되고 가까이 있는 객체는 상대적으로 크게 투영되므로 사람의 눈으로 3차원 물체를 보는듯한 투영결과를 얻을 수 있습니다. 아래 그림에서 (0,0,Zprop)을 기준으로 임의의 점 P(x,y,z)를 원근투영 시켰을 때 투영면 (Xp,Yp,Zp)의 좌표값은 다음과 같은 식으로 구할 수 있게 됩니다.(비례 식을 통하여 구합니다.





뷰잉 변환(Viewing Transformation)


뷰잉 과정




3차원 뷰잉과정 중에서 뷰잉 변환은 월드좌표계로 통합된 3차원 객체들을 투영변환이 쉽게 적용될 수 있도록 뷰잉 좌표계로 바꾸어 표현하는 과정입니다. 뷰잉변환 단계에서 뷰평면과 뷰잉좌표계를 설정하면 다음 단계인 투영변환에서 사용될 뷰 볼륨 및 튜영면을 뷰잉좌표계에서 지정할 수 있습니다. 뷰잉좌표계는 투영변환을 위하여 사용되는 좌표계로서 대개의 경우 투영방향은 z축 방향이고 투영이 되는 뷰평면은 xy평면으로 설정하여 사용합니다. 뷰잉좌표계의 설정이 완료되면 월드좌표계에서 표현된 3차원 객체들을 뷰잉좌표계로 바꾸는 뷰잉변환을 실행합니다.


투영변환은 월드좌표계에서 뷰잉좌표계로 변환된 3차원 객체를 2차원 뷰평면에 투영시켜 투영좌표계로 변환시키는 과정입니다. 투영의 방식 중에서 평행투영을 적용하면 객체의 상대적인 크기가 유지되며,  원근투영을 적용하면 현실감있는 장면을 얻을 수 있습니다. 또한 투영변환을 수행하고 나면 직각형태의 뷰볼륨이 되므로 클리핑을 쉽게 처리할 수 있습니다. 투영변환을 거쳐 2차원 그래픽스 뷰잉과정과 같이 뷰포트 변환과정에서 출력장치의 장치 좌표계로 표현됩니다.



뷰잉좌표계(Viewing Coordinate System)의 설정


투영변환이 실행되기 위해서는 몇개를 지정해야합니다.


        • 뷰평면 : 투영면

        • 뷰볼륨 : 클리핑 공간

        • 투영방향, 투영중심점 : 투영의 종류에 따라
투영에 대한 이러한 조건들을 지정하기 위하여 뷰변환 단계에서 설정하는 뷰잉좌표계를 이용하면 조건값의 설정이나 투영변환의 처리과정이 간단해집니다.

뷰잉좌표계의 설정은 우리가 사진을 찍는데 카메라에 비유할 수 있습니다. 사진을 찍을 때 카메라의 위치와 바라보는 각도를 조정하여 찍을 대상을 찍을 대상을 결정하는데 이 때 카메라의 필름이 투영면인 뷰평면에 해당하게 됩니다. 카메라의 위치에 따라 필름의 위치가 결정됨므로 이는 뷰 평면의 기준점(VRP, View Reference Point)을 결정하는 것과 동입합니다. 그리고 카메라가 바라보는 방향은 필름과 직각 방향이므로 뷰 평면의 법선백터(VPN, Ciew Plane Normal Vector)가 됩니다. 카메라를 옆으로 돌린 각도는 카메라 위쪽의 방향을 지정하여 각도를 표현할 수 있으며 이는 뷰평면의 위쪽을 지정해주는 뷰업벡터(VUP, View Up Vector)가 됩니다.


여기서 VBR, VPN, VUP를 지정해서 뷰잉좌표계가 결정됩니다. 뷰의 기준점이 뷰잉좌표계의 원점이 되며 시선은 -z방향이므로 법선 벡터의 방향이 뷰잉좌표계의 z축이 되고 뷰잉 좌표계의 y축은 시선의 위쪽을 향하므로 뷰업 벡터의 방향을 y축을 하게됩니다. 오른쪽 그림처럼 y축에서 오른쪽으로 수직인 방향이 자동적으로 x축이 되어 뷰잉좌표계의 모든 축이 결정됩니다.


월드좌표계에서 뷰잉좌표계로 변환

객체에 기하변환을 적용을 하는 대신에 월드좌표계와 뷰잉 좌표계간의 좌표계변환을 적용해도 동일한 결과를 얻을 수 있기 때문에 좌표계변환을 하게됩니다.  좌표계변환의 과정은 다음과 같이 진행됩니다.


        • 뷰잉좌표계를 이동시켜 월드좌표계와 뷰잉좌표계의 원점을 일치 시킵니다.


        • 월드좌표계의 x축을 중심으로 뷰잉좌표계를 회전시킵니다. 이 때 뷰잉좌표계의 z축이 월드 좌표계의 zx평면에 위치하도록 합니다.

        • 월드좌표계의 y축을 중심으로 뷰잉좌표계를 회전시켜서 두 좌표계의 z축을 일치시킵니다.


        • 월드좌표계의 z축을 중심으로 뷰잉좌표계를 회전시켜서 두 좌표계의 y축을 일치시킵니다.


        • x축은 자동적으로 결정되어 두 좌표계를 일치시킵니다.