시각화/프로세싱

▶함께 배우는 프로세싱 :: Processing - bezierVertex

비주얼라이즈 2015. 3. 15. 18:02




▶함께 배우는 프로세싱 :: Processing - bezierVertex


이번 글에서 살펴볼 내용은 프로세싱으 도형관련 함수 중 bezierVertex()이다. 이 bezierVertex()는 인자로 앵커포인트와 제어점, 시작점등의 인자를 포함하고 있어야 한다는 점에서 다른 도형함수들보다 활용하기 어려운 함수로 꼽힌다.


rect()등의 기본함수의 경우 굳이더 설명할 필요가 없겠지만, bezierVertex()함수라면, 꼼꼼하게 정리해둘 필요가 있겠다는 생각이 들었다.
















bezierVertex()


vertex Bezier 곡선 좌표를 지정한다.이 bezierVertex()를 호출 할 때마다 선 또는 모양에 새로운 선분을 추가하는데 추가되는 내용은 다음과 같다.


bezierVertex()함수를 호출 할 때 추가되는 요소들

조절 포인트(Control point) 2개

앵커포인트(Anchor point) 1개

선분(Line segment) 1개

*선분이란, 화면상 두 점사이에 한정된 부분을 말한다.







bezierVertex()의 문법


bezierVertex()의 문법은 다음과 같다. 뭔가 복잡해보이지만 조금만 인내심을 갖고 들여다보기로하자.



bezierVertex()의 문법은 사용하고자하는 목적에 따라 크게 두 가지로 나뉜다. 하나는 일반적으로 X축과 Y축의 좌표로 그리는 방법이고, 다른 하나는 Z축까지 포함하는 방법이다. 만들고자 하는 도형의 형태에 맞게 인자 갯수를 설정한다. 




각 인자들이 의미하는 것

x2 : 첫 번째 제어점의 x좌표

y2 : 첫 번째 제어점의 y좌표

z2 : 첫 번째 제어점의 z좌표


x3  float: 두 번째 제어점의 x좌표 

y3  float: 두 번째 제어점의 y좌표 

z3  float: 두 번째 제어점의 z좌표


x4  float: 앵커포인트의 x좌표

y4  float: 앵커포인트의 y좌표

z4  float: 앵커포인트의 y좌표 


이렇게만 놓고보면 정말 어지럽다. 보다 쉽게 이해할 수 있도록 정리해보았다.


bezierVertex()의 인자에 대한 내용이 보다 쉽게 읽힐 수 있도록 나름 구분해서 정리해보았다. 앞서 이야기 했듯, 활용 목적에 따라 bezierVertex()에 들어가는 인자 수가 결정된다. 왼쪽과 오른쪽은 z축의여부에서 차이가 있을 뿐 동일한 코드이다.









활용방법


앞서 bezierVertex()에 어떤 인자가 들어갔는지 살펴보았고, 이제 실제로 적용하기위한 환경을 셋팅하는 방법에 대해서 알아볼 차례다. 프로세싱에서의 다른 도형함수들(rect, line, ellipse 등)의 경우, 어느위치에서나 홀로 코드하나만으로도 적용이 가능했다. 그러나, 이 bezierVertex()의 경우에는 그렇지 못하다. 



bezierVertex()는 "까다롭다."

bezierVertex()를 호출하기위해서는 이에 필요한 환경이 마련되어야 한다.


1. beginShape()로 shape를 생성할 것을 알린다.

2. bezierVertex()의 기준점이 될 vertex()를 지정한다.

3. bezierVertex()를 실행한다.

4. endShape()로 shape생성종료를 알린다.






시작점을 설정하지 않으면 에러가 발생하게 되는데, 에러메시지는 다음과 같다.

java.lang.RuntimeException:vertex() must be at least once before bezierVertex(), or quadraticVertex()

이러한 상황이 발생하지 않도록, 어떤 상황에서 이런 메시지가 뜨는지 관련사진을 함께 첨부했다. 








beginShape(), endShape()를 적지 않은경우 발생하는 문제


위의 '시작점에러'의 경우, 프로세싱이 동작이 멈추고 에러메시지가 뜨지만, beginShape()와 endShape()를 빠뜨린 경우에는 에러메시지 없이 도형출력이 되지않게된다. 만약 자신이 bezierVertex()를 활용중인데 도형이 제대로 표시되고있지 않다면, 이 두 함수가 잘 열리고 닫혔는지를 확인해보도록 하자.















그외에 bezierVertex()사용시 주의해야할 것.


이 bezierVertex()함수는 반드시 beginShape()와 endShape()사이에서 사용되어야 한다.

3D 버전을 사용하는 경우(z축값을 적용한 경우)는 size()함수에서 P3D 또는 OPENGL로 렌더링 설정을 해주어야 한다.


.