その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

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をアレコレ回転させてみてやっと気づいたこの事実。


「行列の掛け算は順番によって結果が違う」っていう高校で習ったアレはこのことだったのか・・・!