CATransform3D で 複数軸に沿って回転させる場合の注意点
たとえば、
- y軸について110度回転
- z軸について30度回転
CATransform3D transformY = CATransform3DRotate(transform3D, DEGREES_TO_RADIANS(110.0), 0, 1, 0); CATransform3D transformZ = CATransform3DRotate(transform3D, DEGREES_TO_RADIANS(30.0), 0, 0, 1);
という2つの変換行列CATransform3Dがある場合に、
y軸について110度回転させてから
z軸について30度回転
CATransform3D concatenated = CATransform3DConcat(transformY, transformZ);
と、
z軸について30度回転させてから
y軸について110度回転
CATransform3D concatenated = CATransform3DConcat(transformZ, transformY);
は全然違う結果になります。
なかなか思い通りの結果にならなくて、手元のiPhoneをアレコレ回転させてみてやっと気づいたこの事実。
「行列の掛け算は順番によって結果が違う」っていう高校で習ったアレはこのことだったのか・・・!