デフォルトでは、回転行列は原点を回転の中心として使用します。任意の点を中心に回転するには、平行移動行列を使用して原点までの距離を減算し、回転を行ってから、逆に平行移動する必要があります。これが私にとってあまりうまく機能していないように見えることを除いて。私は次のコードを持っています(私のオブジェクトが100x100で、中心が50,50であると仮定します):
t = IDENTITY;
t = translate(t, -50, -50);
t = rotate(t, theta);
t = translate(t, 50, 50);
残念ながら、この変換行列t
をオブジェクトに適用すると、オブジェクトの位置が正しくなくなります。
私は自分の問題を示すために簡単なjsfiddleを実装しました:http://jsfiddle.net/9M3uy/67/
JSFiddleでは、赤い回転した正方形は回転が終了するはずの場所であり(CSS3に組み込まれているtransform-originの提供)、青い回転した正方形は計算が終了する場所です(緑は元の回転していない正方形でした)。 )。
何か案は?翻訳、回転、逆翻訳のメカニズムがどのように機能するかを理解していないだけですか、それともひどく間違ったことをしていますか?