뷰 볼륨(View Volume)
이는 앞서 몇번 언급되었던 뷰 포트를 나타내는 3차원 큐브 또는 볼륨을 뜻하는 개념이다. 이 볼륨은 뷰 평면상에 투영되었을 때 뷰포트에 딱 맞는 크기로 정의되어야 한다. 여기서 중요한 두가지 개념들을 차례로 알아보도록 하자.
1. 뷰플레인 사각형 (Viewplane Rectangle)
먼저 앞서 설명되었던 뷰포트(Viewport)라는 개념을 상기해보자. 이것은 3차원 큐브가 2차원으로 투영된 사각형의 영역이라는 점을 이미 이해했으리라 믿는다. 결국 뷰포트는 그림을 그리는 스케치북이라고 생각하면 된다. 내가 어떤 그림을 그리든 이 스케치북에 그린 것만이 보이게 된다. 만약 이 스케치북의 범위를 벗어난 부분이 있다면 그 부분은 최종적으로는 보이지않을 것이다. 마찬가지로 Object Graphics의 모든 그래픽 객체들은 이 뷰포트상에서 구현이 되어야만 최종적으로 온전하게 보이게 될 것이다. 이 범위를 벗어난 내용은 구현한다고 해도 실제로는 보이지 않게 된다. 이 뷰플레인 사각형이란 것은 뷰포트상에서의 X 및 Y 방향의 좌표 및 경계값을 정의하는 것, 즉 스케치북 내에서의 좌표계를 정하는 것으로 생각하면 된다. 다음 그림을 한번 살펴보자.
이 그림의 가운데 상단을 보면, 그래픽 디바이스 상에서 구현된 어떤 임의의 뷰포트가 있다. 그리고 하단에서는 이 뷰포트 자체에 대하여 좌표계가 정의된 두가지 예제를 보여주고 있다. 좌표계를 정의하는 방법은 당연히 프로그래머 마음대로이다. 왼쪽의 경우는 X축 방향으로는 [0~1], Y방향으로도 [0~1]의 범위값을 갖도록 정이되어 있다. 오른쪽의 경우는 X축 방향으로 [-5~5], Y축 방향으로는 [0~20]의 범위값을 갖도록 정의되어 있다. 이러한 좌표계를 정의하려면 뷰 객체를 만들 때 VIEWPLANE_RECT라는 키워드를 사용하면 된다. 물론 이 속성은 뷰 객체 생성 이후에도 SetProperty 메서드를 사용하여 변경이 가능하다. 위의 그림에서 왼쪽 및 오른쪽 뷰포트에 대한 좌표계의 정의는 다음과 같이 이루어진다.
myView = OBJ_NEW(‘IDLgrView’, VIEWPLANE_RECT=[0, 0, 1, 1])
myView = OBJ_NEW(‘IDLgrView’, VIEWPLANE_RECT=[-5, 0, 10, 20])
여기서 VIEWPLANE_RECT 키워드에 부여되는 4개의 실수로 구성된 벡터에서, 처음 두 원소값은 뷰플레인 사각형의 좌측 최하단 원점의 X, Y 좌표가 되고, 뒤의 두 원소는 뷰플레인 사각형의 가로폭 및 세로폭이 된다. 따라서 오른쪽 뷰포트의 경우, 원점의 위치좌표는 (-5, 0)이지만 가로폭은 10이고 세로폭은 20이기 때문에, [-5, 0, 10, 20]으로 주어졌음을 유념하도록 한다.
뷰 객체를 구현할 때 뷰플레인 사각형의 좌표계를 따로 지정하지 않는다면, 기본설정은 원점의 좌표가 (-1, -1)이고 가로폭과 세로폭이 모두 2가 되도록 지정된다. 즉, 다음 그림과 같이 X방향으로는 [-1~1], Y방향으로도 [-1~1]인 좌표계로 생성된다는 점 역시 잘 기억해두어야 한다.
2. 가까운 쪽 및 먼 쪽 경계면 (Near and Far Clipping Planes)
뷰플레인 사각형이 X 및 Y 방향의 경계 설정이었다면, 이제는 Z방향의 경계도 설정해주어야 한다. 쉽게 생각하면, 뷰플레인 사각형에서 X 또는 Y에 대하여 했던 설정을 Z방향으로도 똑같은 요령으로 해주는 것이라고 보면 된다. 단, Z방향의 좌표값은 관찰자로부터 가까운 쪽으로부터 먼 쪽으로 감소한다는 점, 그리고 Z=0인 기준은 Z방향이 뷰포트를 가로지르는 지점이라는 점만 기억하면 된다. 이 개념은 앞서 투영법에서 충분히 설명이 되었을 것으로 생각하지만, 다음 그림을 보면 이제 확실하게 이해할 수 있을 것이다. 관찰자쪽으로 가까운 경계가 ‘가까운 쪽 경계면(Near Clipping Plane)’이고 먼 쪽의 경계가 ‘먼 쪽 경계면(Far Clipping Plane)’이 된다.
그리고 이 Z방향 좌표의 설정은 뷰 객체의 생성시 ZCLIP이라는 키워드를 사용함으로써 이루어진다. 물론 나중에 SetProperty 메서드를 이용한 변경도 가능하다. 값을 설정하는 요령은 ZCLIP 키워드에 대하여 두 개의 원소로 이루어진 벡터를 부여하되, 가까운 쪽 경계면의 Z좌표값과 먼쪽 경계면의 Z좌표값의 순서로 적는다. 예를 들어, 가까운 쪽 경계면의 위치가 2이고 먼 쪽 경계면의 위치는 -3으로 설정하고자 한다면 다음과 같이 하면 된다.
myView = OBJ_NEW(‘IDLgrView’, ZCLIP=[2, -3]
위의 그림에서 한가지 또 눈여겨봐야 할 것은 A, B 두 그래픽 객체들이다. 가까운 쪽 경계면과 먼 쪽 경계면의 사이 공간에 존재하는 A라는 그래픽 객체는 나중에 관찰자의 눈에 보이겠지만, 그 범위를 벗어나서 구현되어 있는 B라는 그래픽 객체는 존재는 하더라도 실제로는 보이지 않게 된다. 따라서 B객체의 경우 위치를 관찰자쪽으로도 조금 끌어당기든가 아니면 아예 제거하는 것이 바람직할 것이다.
'IDL > Object Graphics' 카테고리의 다른 글
Object Graphics in IDL [21] (0) | 2011.01.18 |
---|---|
Object Graphics in IDL [20] (0) | 2011.01.11 |
Object Graphics in IDL [18] (0) | 2010.12.31 |
Object Graphics in IDL [17] (0) | 2010.12.27 |
Object Graphics in IDL [16] (0) | 2010.12.15 |