私のアプリケーションでは、ユーザはワークプレーン上の3つのオブジェクトを選択して、すべての変換をグループ化してすべての子に適用する「変換」コンテナ、つまりObject3D
を使用してこれらの要素を拡大、子要素の選択を解除すると、親コンテナの変換はすべての子に移され、変換コンテナから削除され、メインのシーンオブジェクトに追加されます。子要素に同じ順序で親変換を適用する方法はありますか?
しかし、子要素は、コンテナに変換が適用され、要素自体ではなく、変換コンテナに適用されるときに、別の方法で変換されます。ローカル回転を持つ子を持つコンテナにスケール変換を適用すると、ローカル回転が最初に適用され、その後コンテナのスケール変換が適用されるように見えます。
child.applyMatrix(parent.matrixWorld)
のすべての子に親の変換を適用し、その子をシーンコンテナに戻すと、変換の順序が逆になります。
- コンテナ[規模] {子[回転]} - >順序:回転、スケール
child.applyMatrix(parent.matrixWorld)
- 子[スケール、回転] {} - >順序:スケール、回転
同じ変換順序と外観結果を得るには、子要素と何が関係がありますか?
アップデート:私は正しく子供に親の変換を適用する方法を考え出し
。
child.matrix.multiplyMatrices(parent_old.matrixWorld, child.matrix);
をもchild.matrixAutoUpdate = false;
を設定し、そのため、matrixAutoUpdate = true
は動作しません
child.matrix.decompose(child.position, child.quaternion, child.scale);
を左:私はObject3D.applyMatrix()
から同じコードを使用していました。 Matrix4.decompose()
何らかの形でposition
、scale
とquaternion
を設定する前に行列の値を変更します。したがって、私の例では、親のスケール変換によって適用された内側の子のシャーリング変換がリセットされます。
ネストされたオブジェクト変換が使用されている場合、このような種類の変換が許可されて表示されるため、これは私には矛盾して見えます。さらに、child.applyMatrix(parent.matrixWorld)
を使用して子オブジェクトに親トランスフォームを適用すると(私はその目的のための解決策としてよく読んでいる)正しいものではありません。これがthree.jsの意図された動作であるかどうかはわかりません。もしそうなら、誰かが理由を説明することができますか?
(1)この問題を示すために、簡単なライブサンプルを表示することをお勧めします。私はあなたの問題が何かを推測しています...(2)[this three.js post](https://github.com/mrdoob/three.js/issues/3845)を参照してください。 (3)また、[このSOの回答](http://stackoverflow.com/questions/35364409/three-js-add-an-object-to-a-group-but-keep-global-position-rotation- scale-as-it/35365349#35365349)。 – WestLangley
多くのありがとう@WestLangleyこれはまさに問題です。明らかに、私は、あなたがあなたの投稿(2)で言及したこの不均一な規模のケースを見つけました。私の使用事例では、この不均一なスケールが必要です。手動で行列を設定する( 'matrixAutoUpdate = false')に切り替えるときに私のコンセプトを使い続けることはできますか? – tomacco
はい、位置、四元数、または位取りを直接設定するメソッドは機能しません。 – WestLangley