[요기서 진행할 tip은 R11.5 상에서 제작됩니다. 그렇다고 R12에서 안되는건 아니네요 ㅋㅋ]
정확히 표면 위에 원하는 곳으로 옮길 수 있습니다.
움직여야하는 표면이 sphere(완전구체)라면 극 점을 제외하고는
perspective view를 이리저리 돌리며 간신히 위치나 파악하는 정도가 됩니다.
저도 역시 같은 노가다를 하다가 방법이 떠올라서 공유하고자 합니다.
(실상 LV3인데 강좌 하나 못 적은 것이 민망하기도 했어요 ㅡㅅㅡ;;;;)
============(서론 끝)======================================
1. (0,0,0) 지점에 위치한 반지름(radius) 600 짜리 sphere를 생성합니다.
![t01.jpg](files/attach/images/1524346/365/340/001/c5e1c331e9988cfcd84ba6b06ed82e18.jpg)
2. null object를 생성합니다. (전 point 라는 이름을 주었습니다.)
그리고 point에 xpresso tag를 할당합니다.
(우클릭하시고 CINAMA 4d Tag - Xpresso 를 누르시면 됩니다. 설마.. 혹시..에이.. 모르실리 없겠져~~~)
!! 주의 !!
이후 단위벡터 계산의 원활함을 위해서 point는 0,0,0 이라는 초기 위치에서 아주 조금이라도 움직여 놓습니다.
![t02.jpg](files/attach/images/1524346/365/340/001/d2bf89b053a31aecd49796c9cdec9e77.jpg)
3. point에 위와같은 user data를 하나 추가합니다.
float 이고 real 방식으로 표기되며 값은 0.01 단위로 움직이고 초기값은 0입니다.
!!! 주의 !!! 값을 생성하셨으면 반드시 실제 설정치를 600으로 해주세요.
![t00.jpg](files/attach/images/1524346/365/340/001/11a8e0d83317081ef66685d797f21e09.jpg)
4. 본격!!!!! Xpresso 코딩입니다.
(point 옆에 위치한 Xpresso tag를 더블클릭하면 Xpresso를 edit할 수 있는 창이 열려요...
에이..설마... 아시겠지...)
5. object window에서 point를 drag and drop으로 Xpresso edit window로 끌어옵니다.
(이런 방식으로 계속 설명할라고 했는데... 정력부족(응?)으로 툭툭 넘어갈께요)
![t06.jpg](files/attach/images/1524346/365/340/001/39d4477d75a42ca959c89aa630faa532.jpg)
오른쪽 빨간 귀퉁이를 눌러서 Global point x,y,z와 user data인 set_radious를 나오게 해주세요.
오른쪽 버튼을 눌러서 New Node - Xpresso - Calculate - COFFEE를 꺼내줍니다.
COFFEE의 input를 real value로 2개 더 늘려주시고 이름을 x1, y1, z1, radius로 바꿔주세요.
그리고 output은 real value로 총 6개를 만들어주시고 이름은 sx1, sy1, sz1, uvx, uvy, uvz 라고 해주세요.
6. 이제 COFFEE로 코딩을 할 차례에요. COFFEE node를 선택하면 Attrivutes window 하단에
open COFFEE Editor가 있어열. 눌러주시고 아래와 같이 코딩합니다.
![t03.jpg](files/attach/images/1524346/365/340/001/fb1851b2129315e7e1319477a11e7f2e.jpg)
원리는 간단합니다. 원점(0,0,0)에서부터 point 위치까지 해당하는 벡터 v1이 있다고 가정한후
v1의 절대적인 크기를 sN에 할당합니다.
그리고 이녀석의 크기로 각 x1, y1, z1를 나눠주면 단위벡터의 3값 uvx, uvy, uvz가 나옵니다.
(단위 벡터는 벡터의 방향은 유지한 채 크기는 1이 되는 벡터입니다. 망할 선형대수 시간에 나오죠 ㅋ)
그럼 단위 벡터를 노멀 벡터로 할당하고 sx1~z1 포인트에는 원하는 반지름 크기(radius)만큼 곱해주면 원하는 좌표로갑니다.
(단위 벡터를 노멀 벡터로 할당하는 이유는 항상 point의 z축이 중력을 받아서 지표면에 수직인 것처럼 만들어주려는 계략(?)입니다)
7. 자 이제 뭐 없습니다.
reals2vector node 2개와 vector2matrix node 그리고 matrix2HPB 노드를 각각 꺼낸 후
point node를 하나 더 만들어서 Global Position, 과 Global Rotation HPB 를 각각 불러와 주시고
아래 그림처럼 착착 연결합니다.
![t04.jpg](files/attach/images/1524346/365/340/001/b62e015412c62c36e024f63080ea9143.jpg)
==========(노가다 끝)========================
이제 제대로 붙었는지 확인을 위해서 point 아래에 cube 정도 만들어서 넣어주시고
원하는 크기로 조절하 신후 조명 때려보시면 그림자가 착 생기면서 나 여기 있네 할것입니다.
![t05.jpg](files/attach/images/1524346/365/340/001/533f583f93626cb7877e09d1cd7ee61d.jpg)
![t07.jpg](files/attach/images/1524346/365/340/001/9b480154490a18c59bf10985a1fc74da.jpg)
그럼 위 그림처럼 아무리 point를 움직여도 계속 surface 위에 있는 것처럼 나타나요 ㅋㅋㅋ
단!!!!!!!!!!!!!!!
절대적으로 sphere가 커지면 계산상의 오차가 발생하는 것인지....
조금씩 포인트가 들뜨는 현상이 생깁니다.
이때는 set_radius를 서서히 조절해서 surface위에 떨어지게 고쳐주셔야해요~~
==========================================
뭐 말로 백날 떠들어도 감이 안오시는 분들을 위한....
마지막 뽀나쓰(응? 당연한 건데 왠 뽀나스..)
제가 만든 c4d project file이에요.(우우!! 꺼져라.. 이게 모냐!!)
ㅡㅅㅡ;;; 모르시겠으면 까보세요...