PATCHES

CONIC 명령어는 직선을 control points를 이용해서 변형시켰다. 그렇다면 이번에는 평면을 control points를 이용해서 변형시켜보자. 팽팽하게 당겨진 천의 중앙에 실을 매달아서 위나 아래로 잡아당긴다고 생각해 보자. 그러면 평평하게 펴진 천이 불룩해 질 것이다. 이것이 PATCHES 명령어다.

천을 평평하게 펴기위해 옆에서 잡아주는 기능은 그림 7.6의 1, 2, 3, 4, 6, 7, 8, 9번이 수행한다. 그리고 위/아래로 잡아 당겨주는 기능은 5번이 수행하게 된다. 옆에서 잡아주는 점이나 위/아래로 당겨주는 점의 위치는 사용자가 원하는 위치에 놓을 수 있다. ASAP에서는 이 지점을 POINTS 명령어로 만들어 주면된다. 그런데, PATCHES에서 사용되는 POINTS 명령어는 일반적인 POINTS 배열 방법과는 조금 다르게 작성해 주어야 한다.

PATCHES_MATRIX_01
그림 7.6 POINTS 순서

아래 프로그램을 보면 POINTS x y z n의 명령문 형식을 따르는데, 5번의 z 축 값이 1이고 n 값이 2 인 것을 확인할 수 있다. 한가지 더 특이한 것은 9번의 n 값은 POINTS의 마지막임에도 0이 아니라 1이다. 물론 이것은 PATCHS 명령어가 있기 때문에 0이 아니라 1이 되어야 하는 것이다.  이렇게 POINTS를 다 작성하였다면 다음에는 PATCHES 명령어를 추가하여 이 POINTS 들을 면으로 만들어 주어야 한다. PATCHES 명령어를 사용하기 위해서 찍은 POINTS이기 때문에 여기서 PATCHES를 적용하지 않고 POINTS들 만으로 그림을 그리면 이상한 형상이 나오게 된다. 이것은 5번이 control points가 되지 않고 POINTS에 의해 만들어지는 직선 상의 한점으로 인식되기 때문에 이상하게 찌그러지는 것이다.

SYSTEM NEW
RESET

EDGE
  POINTS
0 0 0 1,  1 0 0 1,  2 0 0 1
                  0 1 0 1,   1 1 1 2,  2 1 0 1
                  0 2 0 1,  1 2 0 1,  2 2 0 1
  PATCHES 2 2 1 1                               !! 2×2 Surface mesh
OBJECT ‘PATCHES_CURVE’    

WINDOW Y X
PLOT CURVES OVERLAY
PLOT FACETS
7 7
RETURN

PATCHES 다음에 나오는 2 2 는 surface mesh 값으로서 면이 몇개의 조각모음으로 만들어졌는지를 알려주는 것이다. 즉, 옆으로 3개의 points가 있지만 3개의 points로 만들어지는 연결선은 2개인 것이다. 밑으로도 마찮가지로 연결선은 2개이다. 즉 2×2의 연결선으로 평면이 만들어진다는 것을 의미한다. 그리고 다음에 나오는 1 1 은 몇개의 천을 사용하는지를 의미한다. 즉, 천이  X축으로 1개, Y축으로 1개가 있다는 의미이다. 천을 여러개 가지고 놀 수도 있다. 이 부분은 뒤에서 좀 더 알아보자. 그리고 PATCHES 명령어는 EDGE ~ OBJECT ‘PATCHES_CURVE’ 명령어 구간 안에 위치해 있어야 한다.

아래 그림은 위로 잡아당긴 천을 위에서 본 모양이다. X, Y의 좌표축 중심을 나타내는 직선을 무시한다면 가로로 7조각, 세로로 7조각으로 쪼개져서 표시된 것을 볼 수 있다. 이것은 3D View로 보면 확실히 알 수 있는데 PLOT FACETS 7 7 의 값이 이 조각들을 결정 짓는다. 이것은 단순히 그래픽적으로 보이는 것을 결정짓는것 뿐이다.  더 정밀하게 쪼개진 형상을 보고 싶으면 이 값을 크게 가져가면 된다.

PATCHES_01
그림 7.7 PATCHES로 그려진 면

그림 7.8은 옆면에서 본 모습으로 5번 지점의 Weight 값이 2인 경우로 약간 볼록한 형상을 가지게 된다. 자세히 보면 X=1, Z=1의 위치에 control point가 찍혀있는것을 확인할 수 있다. 그리고, X=1일때 볼록한 지점의 Z값은 0.4정도 된다.

PATCHES_02
그림 7.8 Weight=2인 경우

그럼 Weight로 8을 주면 어떻게 될까? 그림 7.9처럼 위쪽으로 많이 볼록한 형상을 가지게 된다. 이때 Z값은 0.7을 조금 넘는다.

PATCHES_03
그림 7.9 Weight=8인 경우

그럼 하나의 평면에 2개의 control points를 둘 수 있을까? 답은 가능하다. 대신 control points 수만큼 평면의 테두리 부분에도 points 수가 늘어나야 한다. 아래 프로그램은 위의 프로그램을 약간 수정하여 2번째 줄에 1 .5 1 2 라는 control point를 추가하였다. Control point의 좌/우로 0 1 0 1과 2 1 0 1 이라는 테두리 점을 추가하였는데, control point와 연결되는 좌/우 points가 꼭 평행선상에 위치할 필요는 없다는 것을 보여준다. 물론 이 두 points의 Y축값이 1 이 아니라 0.5 이면 좀 더 균형잡힌 곡면이 만들어 지겠지만 현실 세계가 그렇게 질서정연하지만은 않으니 상관없다.

EDGE
  POINTS
0 0 0 1, 1 0 0 1, 2 0 0 1
                  0 1 0 1, 1 .5 1 2, 2 1 0 1       !! Control point 추가
                  0 1 0 1, 1   1 1 2, 2 1 0 1
                  0 2 0 1, 1 2  0 1, 2 2 0 1         
  PATCHES 2 3 1 1                                 !! 2×3 Surface mesh
OBJECT ‘PATCHES_CURVE’

그림 7.10을 보면 알 수 있듯이 control point가 추가되면서 surface mesh 값도 추가되었다. 즉, X축으로는 2개의 연결선을 가지지만, Y축으로는 3개의 연결선을 가진다는 것을 확인 할 수 있다. 그래서 PATCHES 명령어 다음에 나오는 k l 값도 2 3 으로 바꿔 주어야 한다. 비록 두지점에서 잡아당기기 놀이를 했지만 그래도 여전히 천은 하나이기 때문에 m n 값은 1 1 로 변화가 없어야 한다.

PATCHES_04
그림 7.10 2×3 Surface mesh

PATCHES (ASAP Command)
Points represent Bezier surface patches.Syntax
PATCHES  k  l  [ m  n  [ SEPARATE ] ]

Option Description
k l Bezier degrees used for surface mesh
m n rational patches
SEPARATE use separate rational patches (default is joined)

 

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: