シーンに2つの単純な3Dオブジェクト(球と立方体)があり、それらが衝突しているかどうかを検出したいと思います。
これはどのように達成できますか?
シーンに2つの単純な3Dオブジェクト(球と立方体)があり、それらが衝突しているかどうかを検出したいと思います。
これはどのように達成できますか?
最も簡単なオプションは、Vector3のdistanceTo()またはdistanceToSquared関数を使用して、2つのオブジェクト間のユークリッド距離を使用することです。
例えば
console.log(yourCube.position.distanceToSquared(yourSphere.position));
2つのオブジェクト間の距離が、球の半径と立方体の側面の合計よりも大きい場合、それは潜在的な衝突になります。また、distanceToSquaredの方が高速であり(sqrtを呼び出さないため)、衝突をチェックするのに役立つため、distanceToSquaredも提案しています。
この方法は非常に正確ではないことに注意してください-基本的に2つの球の間の衝突をチェックします(立方体を立方体の側面の半分に等しい半径の球として推定します)が、それはセットアップに十分に近い/十分であることを望んでいます私の意見では、実装するのが最も簡単で最速です。
立方体の角が、特定の距離まで衝突をトリガーせずに衝突することに気付くかもしれません。別の立方体の辺の比率を渡すことで、「しきい値」を調整できます。立方体の周りの球体と、その球体の比率がセットアップに対して適切な推定衝突を取得するためにどのくらいの大きさであるかを想像してください。
頭に浮かぶもう1つの方法は、立方体に最も近い球上の点を見つけることです。
例えば
var pointOnSphere = yourSphere.position.clone().sub(yourCube.position).normalize(). multiplyScalar(yourSphereRadius);
これが頭のてっぺんから外れている場合、上記のスニペットが機能することを保証できません。最初にチェックするために、pointOnSphereの座標にパーティクルを配置する価値があるかもしれません。
この本で確認できる3Dのより高度な衝突検出アルゴリズムは他にもありますが、可能な限りシンプル/高速に保つのが最善です。
残念ながら、three.jsには衝突検出器がありません:衝突検出?。
プラグインライブラリを使用する必要があると思います。このように:http://yomotsu.github.com/threejs-examples/cannonjs_box/。