3

私は Minecraft スタイルのゲームに取り組んでおり、レンダリングされる世界の量を減らす方法が必要です。現在、私は単純なすべてをレンダリングするアプローチを使用していますが、これには明らかなスケーリングの問題があります。ブロックの配列を取得し、どのブロックが空気、水、またはその他の半透明のブロックに接触しているかを何らかの方法で見つける方法が必要です。

私は NumPy や SciPy などの外部モジュールを使用することにオープンですが、それらのドキュメントのいくつかは私の頭を少し超えています。別の方法として、各ブロックを繰り返し処理して近隣のリストを取得することもできますが、C ではなく Python でこれらの計算を行うと、パフォーマンス コストがかなり高くなります。

記録のために、私はすでに NetworkX を調べてみましたが、可視性チェックよりも科学的分析または経路探索のためのようです。

4

2 に答える 2

4

これを一度だけ行う必要がある場合、パフォーマンスは問題になりません。ワールドが変更されるたびにブロックのプロパティも段階的に更新する場合.isBoundaryは、再度行う必要はありません。

ただし、世界が大きすぎるか、穴や洞窟でいっぱいで、透明と非透明が交互に配置されている場合は、依然として問題が発生します。何が見えるかを動的に決定する必要がある場合は、空気/水/その他の巨大な広がりを持つことができるoctree ( http://en.wikipedia.org/wiki/Octree ) を保持できます。「透明」とラベル付けされた単一のノード(巨大なブロック)として。次に、「paintbucket」アルゴリズムを使用して (ダイクストラのアルゴリズムを実行するように変更されているため、現在のブロックと原点の間にブロックが存在するかどうかを確認することで、「角を曲がった」ことを簡単に検出できます)。ブロックが見えます。プレーヤーの動きが遅い場合、遠くにあるものの更新が大幅に遅れる可能性があります。

于 2011-07-15T07:08:08.600 に答える