2017-11-19 9 views
0

すべてのフレームを更新する関数で、オブジェクトにmatrix4を徐々に適用したい。three.js:2つの行列間の変換

私に2つの行列がある場合、それらの違いを知る方法は何ですか。私は2つの違いの最初の+ 0.2を表す行列を知りたいとしましょう。

+1

行列間で直接補間することはできません。 [この質問](https://stackoverflow.com/questions/3093455/3d-geometry-how-to-interpolate-a-matrix)より多くの洞察を与えるかもしれません。 – BDL

+0

ローテーションデータのみを持つ行列の場合は? – Tlatis

+1

いいえ特に回転では不可能です。通常は回転角度の線形補間が必要ですが、行列には​​角度のsinとcosのみが含まれています。あなたは奇妙な見た目の結果を与えるものを補間するでしょう。行列を分解し、角度を補間して新しい行列を作成します。 – BDL

答えて

1

THREE.Quaternion.slerpTHREE.Vector3.lerpの方法を調べる必要があります。

Slerpは「球形線形補間」を表し、lerpは「線形補間」を表します。

マトリックスは、これらの2つに基づいて3つで構成する必要がありますが、myObject3D.positionmyObject3D.quaternionを設定すると3つが内部的に処理されます。

出発点がmatrix4の場合は、decomposeをクォータニオンとベクターに、次にcomposeを新しい結果から入力します。行列の最終結果のみを使用する場合は、makeRotationFromQuaternion(quaternion)とそれに続くsetPosition(position)を使用できます。

+1

おそらく 'matrix.decompose(position、quaternion、scale)'を使ってそれらの値を行列から取得し、 'matrix.compose(position、quaternion、scale)'を使って値を行列形式に戻すことができます。 –

+1

それに関するさらに詳しい情報が追加されました。 – pailhead

関連する問題