Matrix3D -中心で回転させる-

2010/03/17

オブジェクトを中心で回転させるプログラムに完全にハマりました(T_T) とりあえず、このサイトのヘッダーメニューとBlog画面に実装しましています。

昔からベクトル大嫌い! でも、3Dやるには切っても切れないから勉強しないと、この先思いやられるなぁ。

てか、中心の回転はFlex4で簡単にできるようになるんだっけ?(^^;)

とりあえず、サンプルコードを抜粋 [as3] var matrix:Matrix3D = new Matrix3D();

matrix.appendTranslation(-target.width/2, -target.height/2, 0); if (_params.rotationX > 0) { matrix.appendRotation(nRotationX, Vector3D.X_AXIS, new Vector3D(defaultX, defaultY)); } if (_params.rotationY > 0) { matrix.appendRotation(nRotationY, Vector3D.Y_AXIS, new Vector3D(defaultX, defaultY)); } matrix.appendTranslation(target.width/2, target.height/2, 0); target.transform.matrix3D = matrix; [/as3]

オブジェクトを中心に回すには、基軸をオブジェクトの中心にずらさなくてはいけない。 肝は、pivotPointでした。

(1) appendTranslationでオブジェクトの幅、高さの半分平行移動

(2) appendRotationで各軸で回転させるが、第3引数のpivotPointで基軸を設定する

(3) appendTranslationで(1)で平行移動した分を戻す