2013-02-28 3 views
3

세 가지 각도로보기를 회전하려면 : rx, ry, rz.세 축을 중심으로 한 CATransform3D 회전 이해

는 여기에 내가 무슨 짓입니다 :

_tx = CATransform3DMakeRotation(rx*M_PI/360, 1, 0, 0); 
_ty = CATransform3DMakeRotation(ry*M_PI/360, 0, 1, 0); 
_tz = CATransform3DMakeRotation(rz*M_PI/360, 0, 0, 1); 
view.layer.transform = CATransform3DConcat(_tx, CATransform3DConcat(_ty, _tz)); 

나는 연결 순서를 반전하려고 할 때 나는 그것이 작동 되었더라도. 예를 들어,

view.layer.transform = CATransform3DConcat(_tx, CATransform3DConcat(_ty, _tz)); 

view.layer.transform = CATransform3DConcat(_tz, CATransform3DConcat(_tx, _ty)); 

이 같은 결과를 포기하지 마십시오!

  1. CATransform3DMakeRotation과 함께 3 축을 중심으로 회전하는 방법이 있습니까?
  2. 아니면 더 좋은 방법이 있나요?
+1

[this] (http://ronnqvi.st/the-math-behind-transforms/)가 변환에 대한 이해를 돕는 지 확실하지 않습니다. –

+0

링크를 제공해 주셔서 감사합니다. – Martin

+0

각도를 라디안으로 변환 =도 * M_PI/180; – Jeff

답변

6

매트릭스 연산은 교환 적 (commutative)이 아니므로 곱셈하는 순서를 변경하면 결과 변환 행렬이 달라집니다.

어떤 순서로 3 가지 다른 회전을 적용 하시겠습니까? 이것이 변환 매트릭스를 연결해야하는 순서입니다.

+0

조명 해 주셔서 고맙습니다. 당신 말이 맞아요, 진짜 작은 큐브로 두 번의 간단한 회전을 시도했기 때문에 그것이 비 교환 적이라는 것을 알 수 없었습니다. 내 변환이 완료되어야하는 순서를 결정할 수 없기 때문에 나는 개념적인 문제가 있다고 생각한다. 당혹 스럽다는 사실은 내가 단 하나의 변환 대신에 3 개의 변환을한다는 사실입니다. 'CATransform3DMakeRotation'에 (x, y, z)가 있다면, 하나의 명령어 shound'nt에서 이것을 달성 할 수있는 방법이 있어야합니까 ?? – Martin

+0

@Martin 당신이 할 수있는'view.layer.transform = CATransform3DMakeRotation (totalAngle, rx, ry, rz);'rx + ry + rz = 1이고 (rx, ry, rz)는 주위를 돌고있는 벡터입니다. –

+0

좋아, 이해하기 시작했다. 3 개의 변환 결과 벡터와 각도를 계산해야합니다. 어쩌면 당신의 연결은 도움이 될 것입니다. – Martin

관련 문제