맥스스크립트 기초

오브젝트의 Transform (1)

스크립팅하는애님 2019. 7. 14. 01:19
728x90
반응형

안녕하세요.

애니메이터가 들려주는 맥스 스크립트의 스크립팅하는 애님입니다.

오늘은 오브젝트의 Transform에 대해서 얘기해 보도록 하겠습니다.

 

Transform을 사전적인 의미를 보면 '변환'이라고 나오는데요.

오브젝트의 가장 기본적인 변환이라고 할 수 있는 '위치', '회전', '크기'입니다.

위치 : pos (position을 줄인 단어입니다.)

회전 : rotation

크기 : scale

위치, 회전, 크기는 각각 3개의 값이 들어있는 Point3라는 형식으로 되어 있습니다.

맥스가 3차원의 툴이기 때문에 Point3는 x값, y값, z값이 들어 있습니다.

point3 <x> <y> <z>

 

얘기로만 하면 뭐하겠습니까, 한번 만들어서 주물러 봅시다.

저번과 같이 박스를 만들어 봅시다.

 

1
myBox = box()
cs

 

 

 

당연스럽게도 박스가 생겼습니다.

 

만들어진 myBox의 transform에 대해서 확인해 볼까요?

이어서 다음과 같이 써 본 뒤에 새로 쓴 부분을 한 줄 실행(Evaluate Line / Selection)을 사용하여 실행해 봅시다.

 

2
myBox.transform
cs

 

 

 

맥스 스크립트 리스너에 (matrix3 [1(matrix3 [1,0,0] [0,1,0] [0,0,1] [0,0,0])라는 결과 값이 나왔네요.

'행렬'이라고도 불리는 녀석이 튀어나왔습니다.

학교 다닐 때 열심히 공부를 하지 않았더니 다시 배우고 싶은데 이해가... ㅎㅎㅎ

3D MAX라는 녀석은 오브젝트의 Transform을 조정할 때 matrix3을 사용합니다.

저는 아직까지 정확하게 이해하고 있지 못하지만, 배워두시면 3D 게임이나 그래픽 관련 프로그램에서 큰 도움을 받을 수 있습니다.

 

그렇다고 꼭 매트릭스를 알아야 Transform을 조정하는 것은 아닙니다.

이어서 다음과 같이 써 본 뒤에 새로 쓴 부분을 한 줄 실행(Evaluate Line / Selection)을 사용하여 실행해 봅시다.

 

3
4
5
myBox.pos
myBox.rotation
myBox.scale
cs

 

 

블록 지정된 냉요의 첫째 줄은 위치 값(pos)이고, 둘째 줄은 회전 값(rotation)이며, 마지막은 크기(scale)입니다.

두 번째의 회전 값을 알아보기 힘든 것은 차후에 얘기하기로 하고 우선은 위치 값을 알아봅시다.

[0,0,0]

처음 0은 x축의 위치 값을 나타내고 두 번째 0은 y축, 세 번째 0은 z 축을 나타냅니다.

 

그렇다면 해당 값을 변경하면 생각하는 대로 위치 값이 변경되겠지요?

그렇다면 해봅시다.

다음과 같은 내용을 이어서 넣어 봅시다.

 

6
myBox.pos = [50,0,0]
cs

 

 

 

위 이미지와 같이 X축으로 50만큼 이동을 했나요?

다른 축으로도 이것저것 테스트를 해보시고 익혀두세요.

 

그런데 가만히 보면 point3는 왠지 배열과 비슷해 보입니다.

pos를 이용하여 x, y, z값에 다 접근하지 않고 각각 따로 접근하는 방법도 있을 것 같습니다.

이어서 다음과 같이 코딩을 해보고 새로 적은 부분만 블록을 지정하고 실행해 보겠습니다.

 

7
8
myBox.pos.x
myBox.pos[1]
cs

 

 

블록 지정된 결과 값을 확인해 봅시다.

myBox.pos.x와 같이 .x를 넣었더니 pos의 하위 값인 x축을 직접 선택할 수 있습니다.

마침표 '.'를 쓴다는 것은 '.'를 기준으로 오른쪽의 값이 왼쪽의 하위 값이란 뜻입니다.

myBox.pos[1]를 보면 배열의 값의 순서를 가리키는 '[1]'이 들어 있네요.

배열과 비슷한 구조로 되어 있기 때문에 사용할 수 있는 것 같습니다.

둘 중에 어느 쪽을 쓰던지 같은 결과를 나타내니 편한 방법을 사용하시면 됩니다.

 

직접 값을 가져오는 것을 배웠으니 직접 값을 넣어 보도록 하겠습니다.

다음과 같이 이어서 쓰고, 새로 적은 부분만 블록을 지정하고 실행해 보겠습니다.

 

9
myBox.pos.y = -30
cs

 

 

이번에는 y축의 -30으로 이동하게 했습니다.

직접 입력하는 것도 잘 됩니다.

 

지금까지 배운 이동은 절대적으로 이동하는 것입니다.

월드 축을 기준으로 입력한 위치에 이동하는 방법입니다.

하지만 현재 기준(상대적)으로 이동하는 방법도 필요합니다.

지금 위치에서 x축으로 -50만큼 이동하고 싶을 수도 있습니다.

현재 x축이 50이니까 -50해서 0이 나오겠죠.

그러니까 '그냥 x를 0으로 하면 되는 것 아냐?'라고 생각할 수도 있지만, 코딩을 하다 보면 현재 위치를 알 수 없는 경우도 있습니다.

그렇기 때문에 상대적인 방법도 필요합니다.

 

다음과 같이 입력하고 새로 입력한 부분을 블록 지정하고 실행해 봅시다.

 

10
move myBox [-50,0,0]
cs

 

 

 

박스가 x축으로 -50에 위치하지 않고 '50 - 50'해서 '0'이 됐습니다.

move myBox [-50,0,0]

라는 것은 move명령을 사용하여 myBox의 위치 값에 [-50,0,0]을 더한다는 뜻입니다.

'-50'은 '-50'만큼 빼는 것이고 '0'은 '0'만 큼 빼는 것입니다.

'0'은 빼 봐야 소용없기 때문에 원래 값이 됩니다.

 

더하고 뺀다고 했으니 다음과 같은 방법도 가능합니다.

 

11
myBox.pos += [0,30,0]
cs

 

 

박스가 원래 위치인 [0,0,0]으로 돌아왔습니다.

myBox.pos += [0,30,0]

는 myBox.pos = myBox.pos + [0,30,0] 를 줄여서 쓴 명령어입니다.

내용을 확인하면 '원래 박스의 위치인 [0,-30,0] 에 [0,30,0]를 더해서 박스의 위치에 넣어라'입니다.

그러니 다시 [0,0,0]이 될 수밖에 없습니다.

 

오늘은 오브젝트의 Transform 중 위치에 대해 알아봤습니다.

오브젝트를 다루는 내용 중 가장 기초이기 때문에 열심히 익혀두시면 좋습니다.

다음은 오브젝트의 Transform 중 크기에 대해 이야기하겠습니다.

728x90
반응형

'맥스스크립트 기초' 카테고리의 다른 글

오브젝트의 옵션  (0) 2019.07.18
오브젝트의 Transform (4)  (0) 2019.07.17
오브젝트의 Transform (3)  (3) 2019.07.16
오브젝트의 Transform (2)  (0) 2019.07.15
기본 오브젝트 만들기  (1) 2019.07.12
맥스스크립트의 알아두면 좋은 것  (0) 2019.07.12
반복문(while)  (3) 2019.07.10
반복문(for)  (8) 2019.07.09