Clolent

일단 유니티를 사용하던 입장에서 프로세싱의 Rotate는 거지같다. 불편하다


void roate( angle )


자 굉장히 단순하다. 


중심점을 기점으로 판을 잡고 회전시킨다 그림판 자체를


하나의 도형이나 객체를 잡고 회전 시키는 것이 아니라 그려진 판 자체를 회전한다.

제작자가 귀찮은가 보다


문제는 회전 시켜놓은 다음에 원래대로 다시 판을 만들고 진행하지않으면

회전 이미 된 체로 그려지기 때문에 내가 원하던 그림이 아니게 된다.


정리를 하자면 


1. 중심점을 기점으로

2. 그림이 그려지는 판 자체를 잡고 

3. 회전한다.


같은 회전 값을 주더라도 중심축을 어디에 두냐에 따라 결과가 천차만별인것


예시를 들어가며 설명해보자.


이렇게 사각형을 그리고 Rotate 를 해보자

( ※ rotate 는 도형을 그리기 전에 해야한다. 판을 돌리고 그 위에 그리는 것이기 때문 )



회전을 시키는데 사각형이 30도 돌아가는게 아니고, 별 이상하게 돌아갔다.

이유는 중심점이 0,0 으로 되어있기 때문이다. 0,0이면 왼쪽 맨위인데, 저곳을 잡고

30도를 돌렸으니, 이런 그림이 나오게 되는것 자 그럼 우리가 원하는대로 저 사각형만 돌리고 싶다면 어찌해야 할까....


그렇다. 중심점을 옮기면 된다.

중심점을 저 사각형의 가운데로 옮기고 돌리면 되는거 아니겠는가.



????????????


아무것도 안나온다.

어째서인가 ??


중심점을 옮겼기 때문이다. 모든 좌표는 중심점을 기준으로 하는 것이기 때문에

중심점을 옮겼다면, 그에 따른 사각형의 좌표 또한 움직여 줘야 한다.



자 이제 이 사각형 말고 그냥 평범한 사각형 그냥 원래 사각형 하나를 출력해보자.




우리 사각형이 말을 안듣고 이상한 짓을 시작했다. 왜지

우리가 그리는 곳은 지금

바뀐 중심점 위에 회전시킨 판 위에 그린 것이기 때문이다.


우린 이제 하나의 결론을 내릴 수 있다.


뭔가를 돌리고 싶다면

돌리고 싶은 중심점을 잡고

회전시킨다음에


회전을 원상복구 시키고,

다시 중심점도 원상복구 시키고


하던 작업을 하면 된다.


미친것같다


정말 회전 하나 시키는게 뭐이리 힘든지 이거 말고 다른 편하게 회전 시키는 방법 없나요 ??


라고 내가 이미 교수님께 물어봤다 없다고 단호하게 말씀해주셨다.

심지어 교수님도 프로세싱 회전이 참 거지같죠? 라고 하셨다.


그나마 다행인 부분은 

pushMatrix( ) popMatrix( ) 를 사용해서 원상복구하는 과정을 생략할 수 있다.


이 두 함수는 레이어를 하나 만들고 닫는 과정이라고 생각할 수 있다.

pushMatrix( ) 

안에서 rotate 이나 scale 이나 이런 것들을 맘껏 즐기고 (?)

popMatrix( ) 해주면 이제 이러한 설정 값들은 따로 반영이 안된다. 

( fill 같은 것들은 반영이 된다. 반영이 되는 것과 안되는 자세한 사항은 Reference 를 참고할 것 ! ) 


그럼 드디어 드디어 Rotate 에 관한 결론을 내릴 수 있다. ( 사용법 )


1. pushMatrix( ) 로 레이어를 생성하고

2. translate ( x, y ) 로 중심점을 이동하고

3. rotate( angle ) 로 레이어를 회전시키고

4. 내가 하고 싶은거 하고 !

5. popMatrix( ) 로 레이어를 닫는다.


프로세싱은 블록 단위로 접었다 폈다도 못해서 코드가 더러워 지기 쉽상이다.

그런데 매 회전 작업때마다 저걸 한다니....미친게 분명하다


정말 노가다가 강할 것 같다.

답은 함수를 만들어서 사용하는 수밖에 없다고 생각한다.

Processing 에서 Rotate 가 얼마나 병신 불편한지에 대해 알아보았다. 

사용법은 덤이다.







댓글 로드 중…

블로그 정보

Clolent - 커피물조절달인

최근에 게시된 글