1

Sfml を使用して 2D でゲームを作成しようとしています。そのゲームには、Lightengine と、プレイヤーに見える世界の領域を提供できるコードが必要です。両方の問題が非常にうまく適合するため (実質的には同じです)、両方の問題を一度に解決したいと考えています。私の世界は、オブジェクトのヒットボックスがポリゴンとして表現されるファイルからロードされます。ここで、ポリゴンのリストと、マウスに追従する光線の方向を取得し、これらのポリゴンのいずれかとの最も近い交点を見つけるコードをいくつか書きました。次のステップは、プレーヤーまたはライトの位置からポリゴンのエッジに向かってレイをキャストし、レイを +-0.000001 ラジアンオフセットして可視領域を決定し、ポリゴンとして戻すことです。

ただし、問題は、私のアルゴリズム (ベクトル数学を使用して 2 つの線の間の交差を計算する) が遅すぎることです。私の非常に優れた PC では、300 のエッジと 1 つのレイで 100 fps が得られます。

私は今、オンラインで多くの記事を読みましたが、最善の解決策を見つけることができませんでした. しかし、私が読んだ限りでは、三角形との交点を計算する方がはるかに高速です。

私の質問: マップの読み込み中に一度ポリゴンを三角測量してから、光線と三角形の交差を使用する方が意味のある高速でしょうか、それとも私の問題を解決するために知っているより良い方法はありますか? Volumen 階層の境界についても聞いたことがありますが、それがどれほどの影響を与えるかはわかりません。

2 次元の交差を計算するだけでよいため、私のアルゴリズムが消費する電力には少し驚いています...

4

1 に答える 1

1

私が最終的に行った解決策を探しているすべての人のために:

Box2D Physics Engine を発見し、b2World::RayCast(...) 関数を使用して、光線がシーン内のオブジェクトに当たるかどうか、およびその場所を判断しています。今のところ、すべてがうまくスムーズに動作します (正確なベンチマークはまだありません) :) http://www.iforce2d.net/b2dtut/world-querying このサイトの助けを借りて動作するようになりました。:)

于 2015-07-28T15:10:03.683 に答える