1

3Dゲームを作っています。ゲームでは、空間内に位置を持つエンティティのリストがあります。

画面上またはカメラの半径内にあるエンティティのみを描画する最良の方法は何ですか?

たとえば、100,000 個のエンティティがある場合、そのうちの 10 個が同時に画面に表示される可能性があります。配列全体を反復処理して次のようにするのは無駄です。

if(entity.position.x > (camera.x-radius) || entity.position.x < (camera.x+radius)|| ..y..z)
   draw(); // or update
4

3 に答える 3

1

これは、視錐台カリングと呼ばれます。ソースコード付きの詳細記事はこちらです。

別の同様の記事も見つけました。

于 2013-03-05T22:01:39.153 に答える
1

オクツリーで空間を分割する必要があるかもしれません。Octree セル内のオブジェクトを割り当て/維持する必要があります。このような構造を使用すると、どの Octree セルをレンダリングする必要があるかをすばやく見つけて、これらのセル内のエンティティをレンダリングできます。

これを実装するのは明らかではないかもしれませんが、おそらくより良いパフォーマンスが得られるでしょう! オブジェクトが移動する可能性がある場合、これはさらに困難です。すべてのエンティティを繰り返し処理することなく、octree を最新の状態に保つ必要があります。

于 2013-03-05T20:44:18.480 に答える
1

使用しているカメラとビューの種類によって異なります。いくつかの可能性があります:

2D ビューまたはトップダウン地形

ビュー四角形を使用して、オブジェクトの境界四角形がビュー四角形と交差するかどうかをテストできます。

3D ビューまたはパースペクティブ

視錐台 (円錐形のボリューム) を使用して、バウンディング ボックスが錐台と交差するかどうかをオブジェクトごとにテストできます。

于 2013-03-05T22:08:56.143 に答える