2009-07-03 8 views
3

私は、いくつかのパーティクルが相互作用している力ベースの物理シミュレーションをモデリングしています。パーティクルは、静的ビューポートがそれらのトラックを簡単に失うように移動できます(パーティクルのグループ全体が画面から右に移動し、ビューポートが空白の背景を表示していることを想像してください)。重心のビューポートでオブジェクトを移動する

私の現在の解決策は、xとyの最小/最大を見つけて、ビューポートの中央をそれに追従させることによって、粒子の「中心」を単に追跡することです。それは正常に動作します(真の重心を見つける必要はありません)。ここでは、視覚的です:

Viewport

私の問題は、私は手動でマウスを使って周りの粒子をドラッグする機能を追加しようとしています。私はこれを行うエレガントな方法を発見していない。問題は、ビューポートが粒子の中心をたどるため、ビューポート座標とシミュレーション座標の間の変換が絶えず変化することです。

私は粒子上にマウスを置くと、シミュレーションで固定された位置にしたい(それはその上のすべての力を無視する)。ボタンを押したままマウスを動かすと、シミュレーションで粒子が動くようになります。私はこれを達成しました。しかし、ビューポートとまだ動いている他のパーティクルのために不快な副作用を引き起こします。マウスが押し下げられて静止しているにもかかわらず、パーティクルはシミュレーションで動いていませんが、パーティクルの中心が変わり、ビューポートがそれに応じて調整されるため、画面上を移動しています。カーソルは静止しているので、パーティクルはその下から移動します。マウスを少しだけ動かすと、カーソルの新しい位置が根本的に異なるシミュレーション座標を表すため、パーティクルはカーソルの下にテレポートします。

上記の副作用がなく、すばらしい一貫したユーザーエクスペリエンスの提案はありますか?マウスがダウン

  • ビューポートとしてマウスカーソルを移動している間にマウスがダウン
  • ビューポートの変更を一時停止している間、シミュレーションを一時停止

    • :私はすでに考えてきました


      変更(本当に悪い)

    しかし、それらはすべて他の悪い副作用やtを持っていますシミュレーションから離れた値。

    また、私はこの質問は言語とプラットフォームに依存しないので、 "ビューポート"、 "ビューポート座標"、または "シミュレーション座標"にリテラルと実装固有の意味を付けないでください。一般的なグラフィックスの概念として扱います。

  • 答えて

    1

    カーソルの位置を変換の起点として使用するようにビューポートを調整するアルゴリズムを変更してください。こうすることで、カーソルのビューポートとシミュレーションの座標は固定されたままになります。マウスを押したときにこれを行うこともできますが、それがいつでも実行されていれば満足のいく結果が得られるかもしれません。

    数学はやや複雑ですが、あまりにも多くのオプションが残っているようには見えません。

    +0

    これは非常に興味深いです、私はそれを考えませんでした。マウスを下にすばやくジャンプしますが、パーティクルをドラッグしている間は楽しいです。私はあなたに戻ってくるでしょう:-) – colithium

    1

    シミュレーションを一時停止する必要はないと思います。あなたがそれを説明しているように、あなたのマウス入力(ビュー入力)はモデルデータを直接変更し、次の更新/フラッシュ/何が発行されたときにもビューが更新されるようです。

    「アニメーション」でのみ使用される新しい単一のパーティクルを挿入することができ、他のパーティクルには結合されていない可能性があります。このパーティクルを導入している間に、実際のパーティクル(およびそのエッジ)を隠すことができます。そのため、マウスを動かしている間は、このアニメーションパーティクルのデータを更新するだけです。アニメーションが終了すると(マウスを移動させると)、アニメーションオブジェクトは削除され、実際のパーティクルはそのデータで更新され、再度表示されます。

    これは、更新システムを不正使用しているため、一時停止の一種です。パーティクルシステムのデータはアニメーション中には更新されません。実際にユーザーをグラフィカルに不正使用しているときには、実際のシステムのパーティクルを動かしているように見えます。

    +0

    これは現在選択されているパーティクルが他のパーティクルに影響を及ぼしていることを除いて、オプションになります。パーティクルをシミュレーションの「中」に保つ必要があります。だから残念ながら私はグラフィックスのトリックをプレイできません – colithium

    関連する問題