問題タブ [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.
line - 線分上の AABB に最も近い点
AABB に最も近い線分上のポイントを知る必要があります。線がボックスと絶対に交差しないことはわかっています。
可能な単純化として、ボックスの寸法の 1 つが (ほとんどの場合) ゼロであるため、1 つの面に線分上で最も近い点を見つけるだけで十分です。(これを拡張して、エッジ ケースで AABB の 6 つの面すべてをチェックすることができます)
ただ確認するため
- 直線は無限ではなく、2 点で定義されます
- ボックス/面も拘束され、無限ではありません
java - 可能な限り最大の AABB による Java グループ タイル マトリックス
私は 2D タイル ベースのゲームを作成しています。AABB コリジョン アルゴリズムを使用していたときに、この問題で行き詰まってしまいました。タイルのマトリックスがあります。
このマトリックスに基づいて、ここで定義された単純なリストである AABB プールを計算します。
タイル マトリックスを反復処理し、マトリックス内のソリッドに取り付けられたタイルの可能な限り最大の AABB-Rectangle を見つけることができるアルゴリズムを探しています。説明させてください。
この行列を指定すると、アルゴリズムは aabb プールを次のように作成します。
最後に、アルゴリズムをデバッグするためにこのスクリプトを作成しました
スクリプトは次の結果を生成します。
しかし、このアルゴリズムはタイルを y でグループ化して問題ありませんが、可能な場合は x でグループ化しないため、期待どおりではありません。
最後に (長い投稿で申し訳ありません)、アルゴリズムは次のルールを尊重する必要があります。
- タイルを Y ごとにグループ化することをお勧めします
- Y でグループ化できない場合、X でタイルをグループ化します。
- 既存のグループと重複しない
- すべてのタイルをグループ化
c++ - Swept AABB 衝突検出と応答の問題
私は単純な 2D ゲームに取り組んでいますが、衝突の検出と応答に問題があります。この記事から改作したコードを使用しています: http://www.gamedev.net/page/resources/_/technical/game-programming/swept-aabb-collision-detection-and-response-r3084
コードに多くの変更を加えてみましたが、期待どおりに動作させることができないようです。私のアルゴリズムは、1 つの移動エンティティと 1 つ以上の静的ブロックの間の衝突を検出しようとします。次のロジックを使用します。
1. ブロードフェーズ衝突検出:
エンティティの動きをカプセル化する AABB を作成し、静的ブロックの AABB とのオーバーラップを検出します。それらの衝突イベントをリストに追加し、そのリストを衝突の時間で並べ替えます。
2. 狭位相衝突検出:
各衝突イベントの衝突時間と衝突法線を計算し、エンティティを各静的ブロックの外側の適切な位置に移動します。衝突法線を使用して、エンティティを適切な位置にスライドさせます。
衝突イベントの衝突時間を計算するために使用しているコードは次のとおりです。
衝突応答を生成するコードは次のとおりです。
さて、問題点は・・・以下の場合、動いているエンティティが完全に停止してしまいます。どちらの場合も水平にスライドすると予想していました。衝突検出コードの問題なのか、衝突応答コードの問題なのかを判断できませんでした:
javascript - Physics.aabb.union() の適切な使用
私はPhysicsJSを学んでおり、ユニオンを次のように使用してみました:
しかし、ボールは下に落ちるだけです。
GitHub またはそれを使用しているどこにもコードが見つかりません。どなたか手引きをお願いできますか?
unity3d - Unity でメッシュを取得するか、スプライトのローカル境界を取得しますか?
この質問は、Unity ゲーム エンジンのみに関するものです。
これは、薄い 3D オブジェクトである、いわゆる Unity の「スプライト」 (Unity Sprite クラス)の視覚的な例です。
AABB が表示されます (緑色の線)。Unity では、GPU から離れたライブ AABB は.bounds
( doco ) を介して提供されます。CG初心者ならAABBの説明。
(注、Unity の「ローカル」( doco、doco ) は、親オブジェクトのクォータニオンを意味します。「ワールド」は、シーン オブジェクトのクォータニオンを意味します。)
今!Unity エンジニア向けの記事:
通常 Unity では、可視オブジェクトを使用して、Unity Boundsを取得する場合、
ワールド空間でそれらが必要な場合は、ユニティ境界renderer.bounds
をワールド空間で返します。
ローカル空間でそれらが必要な場合は、ローカル空間でUnity Boundsmesh.bounds
を返します。
これは Unity の基本であり、常に行っています。でも。新しいスプライトでは、つまり、私の知る限り、メッシュへの実際のアクセスはSpriteRenderer
ありません。
(実際には .triangles を取得できますが、そこから巻線とサイズを再構築するのは非常に面倒です。)
では、スプライトのローカル Unity Boundsを取得するにはどうすればよいでしょうか?
sprite.bounds
(それ自体はまったく同じであることに注意してください。それはrenderer.bounds
役に立ちません。)
c# - 2 つのオブジェクトのサイズが異なる場合、AABB コライダがスプライトと重ならない
私のプロジェクトでは、2 つの固体オブジェクト間に個別の AABB 衝突を実装しようとしています。私が持っているコードは、同じサイズの 2 つのオブジェクトに対しては正常に動作しますが、サイズが異なる 2 つのオブジェクトでは、2 つのスプライトが明らかに接触していないときに衝突が発生します。衝突時の 2 つのスプライト間の距離は、オブジェクトのサイズの差が大きいほど大きくなります。
なぜこのようなことが起こるのでしょうか? また、衝突が異なるサイズの 2 つのオブジェクトに対して意図したとおりに機能するようにコードを変更するにはどうすればよいでしょうか?
現在の関連コード:
Box 構造体は境界ボックスを表します。また、交差点をチェックするメソッドもあります。交差は否定の方法でチェックされます
コライダーを持つオブジェクトは、IBoundingBoxCollider インターフェイスを実装する必要があります。 public interface IBoundingBoxCollider { #region data Box BoundingBox { get; } ブール SolidCollider { get; 設定; } bool StaticCollider { get; } 設定; } フロート DistanceTraveledThisFrame { get; } #endregion #region メソッド void CheckCollision(IBoundingBoxCollider other); #endregion }
文字は Character クラスによって表されます。このクラスには、CheckCollisions および UpdateCollider メソッドがあります。UpdateCollider は、クラス コンストラクターでも呼び出されます。Character クラスは、アニメーションを処理するクラスである AnimatedObject を継承します。このクラスは、画面へのスプライトの描画を処理する DrawableObject を継承します。DrawableObject には、Position、Rotation、および Scale プロパティがあります。Draw メソッドと Update メソッドは、それに応じて Draw と Update で呼び出される Game1 の静的イベントを処理します。
Game1 クラスには List があります。リストが更新されるたびに繰り返され、2 つのコライダーごとに CheckCollision が呼び出されます。
編集1
Box構造体をMonsetが作成したクラスに置き換え、いくつかの名前を変更して、Monsetによる解決策を試しました。
それは私が封印されたタイプ 'Microsoft.Xna.Framework.Rectangle'から派生できないことを示しています
java - 3D AABB 回転を最適化する方法 (Java)
最近、私は自分のゲーム エンジンに 3D AABB を実装しています。回転を実現するために、Vector3f.rotate() メソッドを使用して、計算された 8 つのコーナーすべてをボックスの中心を中心に回転させる簡単な方法を使用しています。しかし、以下でお気づきかもしれませんが、それは非常に非効率的です。クラス全体を並べ替えたい場合は、github ( https://github.com/EquilibriumGames/Flounder-Engine/blob/master/src/flounder/physics/AABB.java ) を参照してください。もっと簡単な方法があると思いますが、あなたの考えを知りたいです。ありがとうございました!