0

画面上でOpenGLESを使用してレンダリングした2D(おそらく交差する)ポリゴンがいくつかあります。すべてのポリゴンは画面内に完全に含まれています。全画面領域に対するこれらのポリゴンの結合のパーセンテージ領域を見つけるための最もタイムリーな方法は何ですか?ポリゴンがシフトされるたびにカバレッジエリアをすぐに更新する必要があるため、適時性が必要です。

現在、私は各ポリゴンをブール値の2D配列として表現しています。(ジオメトリパッケージからの)ポイントインポリゴン関数を使用して、画面上の各ポイント(x、y)をサンプリングして、それがポリゴンに属しているかどうかを確認し、属している場合は、polygon [x] [y]=trueに設定します。それ以外の場合はfalse。

画面内のすべてのポリゴンに対してこれを行った後、すべての画面ピクセルを再度ループし、各ポリゴン配列をチェックして、ポリゴンのポリゴン[x][y]値がtrueに設定されている場合はそのピクセルを「カバー」としてカウントします。 。

これは機能しますが、ポリゴンの数が増えるため、パフォーマンスは理想的ではありません。可能であればオープンソースライブラリを使用して、これを行うためのより良い方法はありますか?私は考えました:

(1)ポリゴンを結合して、1つ以上の重複しないポリゴンを取得します。次に、標準の多角形の面積の式を使用して、各多角形の面積を計算します。次に、それらを合計します。これを機能させる方法がわかりませんか?

(2)なんとかしてOpenGLを使う。これらすべてのポリゴンを単一の色でレンダリングしていると想像してください。その特定の色でスクリーンバッファ上のピクセル数を数えることは可能ですか?これは本当に素晴らしい解決策のように聞こえます。

これを行うための効率的な手段はありますか?

4

3 に答える 3

1

背景色がわかっていて、すべてのポリゴンに他の色がある場合は、フレームバッファーからすべてのピクセルを読み取りglReadPixels()、背景とは異なる色のすべてのピクセルを単純にカウントできます。

最初の条件が満たされない場合は、カスタムフレームバッファを作成し、すべてのポリゴンを同じ色でレンダリングすることを検討できます(たとえば、バックグラウンドの場合は(0.0、0.0、0.0)、ポリゴンの場合は(1.0、0.0、0.0))。次に、結果のフレームバッファを読み取り、画面全体の赤色の平均を計算します。

于 2013-01-06T12:47:47.023 に答える
1

重なり合わないポリゴンを取得する場合は、線線交叉アルゴリズムを実行できます。単純な変形はBentley–OttmannアルゴリズムですO(n log n + k)が、 (n個の頂点とk個の交差を持つ)さらに高速なアルゴリズムが可能です。

線の交点が与えられた場合、交点で両方のポリゴンを接続する頂点を作成することにより、2つのポリゴンを統合できます。次に、他のポリゴンの内側にあるポリゴンの1つの頂点をたどり(ポリゴンのポイント関数を使用して進む必要のある方向を決定できます)、ポリゴンの外側に到達するまですべての頂点とエッジを削除します。 。そこで、2つのポリゴンの2番目の交点に新しい頂点を作成して、ポリゴンを修復します。

私が間違っていない限り、これはO(n log n + k * p)時間内に実行できます。ここで、pはポリゴンの最大オーバーラップです。

ポリゴンを統合した後、通常の面積関数を使用して、ポリゴンの正確な面積を計算できます。

于 2013-01-06T12:52:27.500 に答える
0

ピクセル数のあるポリゴンの面積を計算するのは複雑すぎて、不正確な場合もあると思います。ポリゴンがカバーする領域の計算に関するstackoverflowの回答でも同様のことがわかります。通常のポリゴンを作成する場合は、通常のポリゴンの領域を参照してください。

于 2013-01-06T12:39:36.800 に答える