2012-11-17 2 views
6

キャンバスで3D変換を行うには、Cameraを使用します。通常、カメラを回転させて行列を取得して翻訳します。カメラにはtranslateメソッドがあります。メソッドを使用した結果は異なります。Camera.translateとMatrix.preTranslateまたはMatrix.postTranslateの違い?

私の質問は:Camera.translateとMatrix.preTranslateまたはMatrix.postTranslateの違いは何ですか?あなたすなわちキャンバスに触れるが、カメラ90のDEGSを回転させたりスチルカメラを保つが、それはは-90 DEGSでを見てキャンバスを回転しない場合

答えて

4

理由があるのは、(既に知っているように)適切な結果を得るために行列乗算を特定の順序で実行する必要があるからです。

翻訳/回転/スケールのシーケンスは、の逆の順序で入力します。

あなたはこのような何かあれば:

Camera.rotate(15, 0, 0); 
Camera.scale(.5f, .5f, .5f); 
Camera.translate(70, 70, 70); 

をあなたはまずX軸の周りに15度回転、あらゆる方向に50%縮小、その後70,70,70を翻訳しています。

Matrixには、実際に15度回転させてから変換してから最終的に拡大縮小したい場合があるので、翻訳前と後ですべての変換を行います。

これは、翻訳前と翻訳後に応答します。カメラがまっすぐ回転して翻訳するのは、私が好きな人のためです(私のようなものです)。そのためにMatrixやCameraは決して使用しません。翻訳、縮尺、および回転が逆の順序で行われることがわかっている限り、あまりにも長い時間を費やすことができます。

また、私があなたに言ったことを知っていれば、それはあなたにもっと力を与えます。それぞれのマトリックスのオブジェクトを囲むことなく、10個のマトリックスのシーケンスを行うことができます(たとえば、外側にスイングして中心を中心に回転させて遠心力をシミュレートするスイングモーションを行いたい場合)。これは、複数の回転と平行移動(複数のMatrixオブジェクトが互いに渡されて囲まれている)で行う必要がありますが、各変換の仕組みが分かっている場合は、一連の.translate()、.rotate()、と.scale()。

この情報は、3Dグラフィックスを行う場合に特に便利です。なぜなら、これらのマトリックスが人々の頭痛を与えるからです。

こちらがお役に立てば幸いです。

+1

あなたはこの事実を発見した文書に案内しますか? – hasanghaforian

+0

あなたの答えをサポートするリンクを教えてください。 –

+0

ああ。私がこれを書いて以来、長いことがありました。このドキュメントはウィキペディアで見つけることができます:具体的には: http://en.wikipedia.org/wiki/Transformation_matrix#Composing_and_inverting_transformations "英語の文とは逆の順番で乗算が行われます。 by B "はABではなくBAです。" –

1

結果は、視覚的に同じになります。

+1

3Dに関する「Android.Canvas」のドキュメントやチュートリアルは、「Magic」と「Surd」のようです。 – hasanghaforian

関連する問題