問題タブ [aabb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 5倍の速度低下を引き起こすブール評価の真実性を否定しますか?
私は八分木を実装しようとしています。そのためには、高速なAABB線交差アルゴリズムが必要です。いくつか検索した後、私はそれを提供しているように見えるこの論文に出くわしました。ここで入手できるソースコードから、pluecker_cls_cff
関数を次のようにC#に変換しました。
これは問題なく機能しているように見えますが、私にはかなり遅いように見えたので(1,000万回の交差を行うには250ミリ秒)、さまざまな種類のマイクロベンチマークを試しました。return
1つは、ステートメントの直後にある否定を削除し、すべての比較を逆>
にしました(<
またはその逆)。
雪が降る:
これでも同じ結果になるはずですよね?いくつかのテストケースを含む否定バージョンと同じ結果が返されるため、そう見えました。ただし、ベンチマークでは、5倍高速でした(1,000万回の交差を実行するには50ミリ秒)。最適化されていなかったと確信しています。私のベンチマークは次のようになります。
この大きな違いを説明できるのは何ですか?x86で.NET4.0を実行しています。
geometry - 2D での三角形と長方形 (AABB) 間の衝突テスト
さまざまな 2D 形状 (circle-circle、circle-tri、circle-rect、rect-rect) の間の交差を正しく機能させるのにかなりの時間を費やしました。からのソリューション) を簡単なプロジェクトに使用し、現在、三角形と AABB の交差テストを実装しようとしています。
しかし、私は少し立ち往生しています。ネットで検索して考えてみましたが、思いつきませんでした。現時点で私に最大の問題を与えているのは、頂点が長方形内にない場合に、三角形のエッジ(これは二等辺三角形です)が長方形と交差するかどうかを確認することです。
これを機能させる方法はありますか?
EDIT:ステージが発生するはずだと思うので、ステージについてもう少し洞察を与えるために:
1 - 頂点が長方形内にあるかどうかを確認します (この部分は簡単です)。はいの場合、衝突、そうでない場合は続行します。
2 - エッジが長方形と交差しているかどうかを確認します。これは私が立ち往生しているところです。これを実装する方法がほとんどわかりません。
collision-detection - 可動および回転可能なキャラクター/オブジェクト/その他を含むゲームでの AABB
初めての 3D ゲームを作成していますが、いくつかの問題に遭遇しました。
AABBの交差とそこからツリーを構築するというアイデアについて読みましたが、理解できなかったのは、ゲーム中に「キャラクター」が回転すると、軸に沿ったという概念が保持されないということです!
いくつかのライブラリ (oz-collide、OPCODE など) をチェックしましたが、実装が静的オブジェクト用に作成されていることがわかりました。ツリー内の各移動後に更新する必要があります)。
これらのライブラリは超高速であるはずでしたが、おそらくどこかで間違っていました。
説明は何ですか?
c++ - AABB (軸整列バウンディング ボックス) 衝突の計算
2 つのピラミッド間の AABB 衝突をチェックすることになっています。私はAABBを調べましたが、簡単に確認できました。両方のピラミッドの頂点と、4 つのワールド位置が与えられました。AABB コリジョン ボックスを計算することになっていますが、これは実行済みで、ピラミッドが衝突するかどうかを確認します。私が混乱している部分は、世界座標は何ですか? ピラミッドごとに 4 つあるので、それらは頂点ではありません..頂点に基づいて衝突するかどうかを判断できるので、世界の位置は何ですか?
graphics - 変換された球のAABBを計算する
オブジェクト空間で中心点と半径で表される球があります。球は、スケール、回転、および平行移動を含む可能性のある変換行列を使用して、ワールド空間に変換されます。ワールドスペースで球の軸に沿ったバウンディングボックスを作成する必要がありますが、その方法がわかりません。
これが私の現在のアプローチであり、いくつかのケースで機能します。
しかし、私はこれが常に機能するのではないかと疑っています。不均一なスケーリングで失敗するべきではありませんか?
c++ - 軸に位置合わせされたバウンディングボックスの衝突:どの側が衝突しているか
アルカノイドのようなゲームを作ろうとしていますが、衝突の問題に直面しています。いつものように、レンガは長方形(私の場合は正方形)であり、ボールは円であるため、軸に沿った境界ボックスがすべてです。
これまでのところ、簡単な衝突検出アルゴリズムがありますが、ボールが各ブリックのどちら側に当たるかを知る必要があります。例えば:
これまでのところ、それぞれの側がヒットしたかどうかをチェックするアルゴリズムがあります。
しかし、画像の3番目のように、コーナーに近い衝突では、2つのフラグ(たとえば、左と下)が1に設定されているため、決定方法がわかりません。
これらの場合、通常は何が行われますか?
graphics - ベジエ AABB を計算する
二次曲線またはベジエ曲線の AABB (軸に沿ったバウンディング ボックス) を計算したいと思います。
これを行う方法を私が知っている唯一の方法は、ベジエ曲線上の多数のポイントを評価し、それらのポイントを使用して AABB を計算することです。
より良い方法はありますか?
c++ - 平行移動/回転後に軸に沿ったバウンディング ボックスを再計算する方法
オブジェクトを最初にロードするとき、最大点と最小点 (x、y、z) を使用して初期 AABB を計算します。しかし、これはオブジェクト空間であり、オブジェクトは世界中を移動し、さらに重要なことに回転します。
オブジェクトが移動/回転するたびに新しい AABB を再計算するにはどうすればよいですか? これは基本的にすべてのフレームで発生します。フレームごとに新しい AABB を再計算するのは非常に集中的な操作になるのでしょうか? もしそうなら、代替手段は何ですか?
AABB を使用すると衝突検出の精度が低下することはわかっていますが、OBB よりも衝突検出コードを実装する方が簡単なので、一度に 1 つずつ実行したいと考えています。
以下の回答からいくつかの洞察を得た後の私の現在のコードは次のとおりです。
しかし、それはうまくいきません...何が間違っていますか?
collision-detection - 軸に沿ったバウンディング ボックスの衝突で衝突法線を決定するにはどうすればよいですか?
3D移動ボックスと固定ボックスがあります。衝突は問題なく検出できますが、衝突応答として移動ボックスを静止ボックスに対してスライドさせたいと思います。このためには、ムービング ボックスと衝突する面の法線が必要です。誰かが私がこれを理解する方法を知っていますか? 衝突テストでこの情報が得られるようには見えません。どんな助けでも大歓迎です。
c# - AABB衝突によるプラットフォームジャンプの問題
私のAABB物理エンジンが交差点を解決するとき、それは貫通が小さい軸を見つけて、その軸上のエンティティを「押し出す」ことによって解決します。
「左にジャンプする」例を考えてみましょう。
- speedXがvelocityYより大きい場合、AABBはエンティティをY軸上に押し出し、ジャンプを効果的に停止します(結果:プレーヤーは空中で停止します)。
- 速度Xが速度Yよりも小さい場合(図には示されていません)、AABBがエンティティをX軸上に押し出すため、プログラムは意図したとおりに機能します。
どうすればこの問題を解決できますか?