3

私はしばらくの間解決しようとしてきた興味深い問題を抱えています。成功のための厳密な基準がないため、これに対する「正しい」解決策はありません。私が達成したいのは、ポリゴンAからポリゴンBへの2つの単純なポリゴン間のスムーズな移行です。ポリゴンAはポリゴンB内に完全に含まれています。

この移行の私の基準は次のとおりです。

  1. 移行は時間と空間で継続的です
  2. ポリゴンAからポリゴンBに「塗りつぶされている」領域は、Aに液体がBの形に注がれているように塗りつぶす必要があります。
  3. このアニメーションは、オンザフライで計算するか、わずかなスペース、たとえば数Kb未満を必要とする一連のパラメーターで定義できることが重要です。

不正行為は完全に問題ありません。見栄えを良くするためにこれを解決する方法は、考えられる解決策です。

私が検討し、ほとんど除外した解決策:

  • AとBの頂点をペアにして、単純に補間します。見栄えが悪く、凹多角形の場合は機能しません。
  • エリアBAを凸多角形(おそらくボロノイ図)に分割し、小さい凸多角形でBFSを実行して、多角形の離散状態を計算します。次に、離散状態間を補間します。注:ポリゴンBAが凸状の場合、遷移はかなり簡単です。BAを同じサイズの小さな凸多角形に分割するのは驚くほど困難だったため、このソリューションは使用しませんでした。
  • シミュレーション:ポリゴンAを細分割します。各頂点をポリゴンラインの法線に沿って(外側に)離散的ですが小さなステップで移動します。ステップごとに、頂点がまだBの内側にあるかどうかを確認します。そうでない場合は、前の位置に戻ります。AがBに等しくなるまで繰り返します。頂点がポリゴンの内側にあるかどうかのチェックが遅いため、このソリューションは好きではありません。

誰か違うアイデアはありますか?

4

1 に答える 1

0

これを単純でやや高速に保ちたい場合は、ポリゴン A をスケーリングしてポリゴン B を徐々に埋めることを検討する最後のアイデアを進めることができます。スケーリングされた外側の頂点がまだ内側にあるかどうかを必ずしも確認する必要はありません。コード環境と API の状態によっては、拡大するポリゴン A のピクセルをポリゴン B のアウトラインでマスクすることができます。

最新の OpenGL では、フラグメント シェーダー内でこれを行うことができます。ポリゴン B をテクスチャにレンダリングし、そのテクスチャをシェーダに送信し、そのテクスチャを使用して、現在レンダリングされているフラグメントがポリゴン B によって設定されたテクスチャ値にマップされているかどうかを調べる必要があります。そうでない場合は、フラグメントは破棄されます。テクスチャを画面と同じ大きさにする必要があります。そうでない場合は、ポリゴン B をそのテクスチャにレンダリングしたのと同じ方法で、テストするフラグメントをテクスチャに「レンダリング」できるように、シェーダーにいくつかのカメラ計算を含める必要があります。

于 2014-11-10T21:20:36.963 に答える