ユーザーは8つの場所(4つのコーナー+ 4つのエッジ)の1つでドラッグして(投影された)平面のサイズを変更できるようにしようとしています)。 このサイズ変更は、ドラッグする方向にのみサーフェスをスケール/ストレッチすることになっているので、このexampleのように同時に2つの反対方向にスケールするので、three.jsのデフォルトのスケール機構は使用できません。インプレースメッシュの位置を補正せずに一方向にジオメトリをスケーリングする
私が読んで多くのことを試してみた、特にこれら2つのポスト:私はこの
// preparing to resize into -x direction aka "left edge"
// moving the geometry center to the right edge
mesh.geometry.translate(width/2, 0, 0);
mesh.geometry.scale(scaleX, 1, 1);
// moving the geometry center back to the middle
// as more resizing might happen, into another direction, as per comment here:
// https://stackoverflow.com/questions/26817717#comment74469004_26818522
mesh.geometry.translate(-(width/2 * scaleX), 0, 0);
になってしまったものを後
- Scaling a Three.js geometry only up
- Scaling a geometry in one direction with top as reference in threejs
結果は私が期待するものではありません: T彼は2つの反対方向に再度スケーリングが起こるので、翻訳は互いに相殺されます。したがって、原点または中心点が右端に置かれている間にスケーリングが起こらないか、私の最後に誤解があります。一方、
これは
mesh.scale.set(scaleX, 1, 1);
mesh.position.x = (-width/2);
正常に動作します。しかし、それは本当に何度も何度も、メッシュの位置をリセットするハック感じている - また、私はメッシュを拡大縮小すると、このようにパフォーマンスが低いことを読んだことがあると思いました変換はフレームごとに再適用されます(ただし、これは間違っている可能性があります:Three.js - Scale model with scale.set() or increase model size?)。一方、下にあるジオメトリの変換はデータに焼き付けられます。
私もTransformControlsのソースを見ていましたが、私たちが望むやり方ではうまくいかず、四分の一の概念が完全にわからなくなってしまったため、私には分かりませんでした。
私の質問はこれですメッシュの位置を修正せずに一方向のリサイズを行う方法はありますか?
混乱を避けるために、最終的にオプションが最初と反対の順序になっているのは意図的ですか? –
コメントを書いた後でコメントを変更できません... _ まずは詳細な解説をお願いします。 ちょうど混乱を防ぐために:最終的なオプションは最初とは反対の順序であることが意図的にありますか? _...(上記参照)_ これをフォローアップするには、メッシュの中心位置を調整する方法の例を教えてください。 それも可能であるかどうかはわかりませんでした。あなたが '.translate'などで位置を変更することを意味しない限り。 –
** 1)**申し訳ありませんが、わかりやすくするためにオプションの順序を調整しました。長い一日を責める。 :) ** 2)**はい、私は新しいスケールを補正するためにメッシュを翻訳することを意味します。 ** 3)**私はもう一度編集します... – TheJim01