binder 컴포넌트는 다른 오브젝트에 기계적으로 맞물려 돌아가는 오브젝트를 시뮬레이션으로 구현해준다. 스키마는 다음과 같다.
{
reference: {type: 'string'},
property: {type: 'string', oneOf: ['position', 'rotation', 'scale']},
begin: {type: 'string'},
end: {type: 'string'},
pos1: {type: 'vec3'},
pivot1: {type: 'vec3'},
deltaPivot: {type: 'vec3'},
rot1: {type: 'vec3'},
rot2: {type: 'vec3'},
enableReversePos: {default: false},
enableReverseRot: {default: false}
}
JavaScript
복사
reference는 연동된 오브젝트의 id이다. 입력할때 '#'을 접두사로 붙여야 한다. reference 오브젝트의 움직임에 따라 이 컴포넌트를 가진 오브젝트의 포지션 및 로테이션이 시뮬레이션된다.
property는 'position', 'rotation', 'scale' 중의 한 값을 갖는다. 레퍼런스 오브젝트의 어떤 프로퍼티를 참고할 것인지 선택하는 것이다. 'scale'도 가능하게 되어있지만 그것이 유용한 유즈케이스는 생각하기 어렵다. 일반적으로 position이나 rotation 둘 중 하나가 선택된다.
begin은 reference 오브젝트의 선택한 property에 대한 구간 시작 값을 나타낸다. 공백으로 구분되는 세 number의 형식을 따른다.
end는 reference 오브젝트의 선택한 property에 대한 구간 끝 값을 나타낸다. 공백으로 구분되는 세 number의 형식을 따른다.
pos1은 reference 오브젝트의 프로퍼티 값이 begin과 같을 때 대응되는 이 컴포넌트를 가진 오브젝트의 포지션 값이다.
오브젝트의 오리진이 회전중심과 불일치 할 경우, reference 오브젝트의 프로퍼티 값이 end와 같을 때 대응되는 이 컴포넌트를 가진 오브젝트의 포지션 값을 알기가 매우 어렵다. 그래서 피벗의 개념을 통해 보다 직관적으로 저작할 수 있게 하였다. 피벗은 오브젝트를 이루는 점들 중 회전운동을 하지 않는 점이다.
pivot1은 reference 오브젝트의 프로퍼티 값이 begin일 때 이 컴포넌트를 가진 오브젝트의 오브젝트 좌표계 상에서의 피벗 위치 벡터이다.
deltaPivot은 reference 오브젝트의 프로퍼티 값이 begin에서 end로 변하는 동안, 이 컴포넌트를 가진 오브젝트의 로컬 좌표계 상에서의 피벗의 변위 벡터이다.
rot1은 reference 오브젝트의 프로퍼티 값이 begin일때 이 컴포넌트를 가진 오브젝트의 로컬 오일러 각이다.
rot2는 reference 오브젝트의 프로퍼티 값이 end일때 이 컴포넌트를 가진 오브젝트의 로컬 오일러 각이다.
enabledReversePos가 참인 경우 deltaPivot은 중간 지점에 대한 변위가 되며 그 지점에서 운동방향이 바뀌어 결과적으로 피벗은 로컬좌표계 상에서 왕복직선운동을 하게 된다.
enableReverseRot가 참인 경우 rot2는 중간 지점에 대한 오일러 각이되며 그 지점에서 회전 방향이 반대로 바뀌어 결과적으로 오브젝트는 단진자 운동을 하게 된다.