2012-01-18 10 views
1

次の問題があります。3Dモデルの2次元ビューを生成する必要があります。通常の状況下では、これはもちろん些細なことです。ペインタのアルゴリズムや同様の手法を使ってすべてをスクリーンにレンダリングします。残念ながら、CADパッケージに送信できるように、出力は2次元ジオメトリである必要があります。これは、隠面消去はピクセルレベルではなくベクトルレベルで行わなければならないことを意味します。これにより、標準的なメソッド(ペインタのアルゴリズム、zバッファなど)のほとんどが使用できなくなります。効率的なオブジェクト空間の隠面消去

オブジェクトスペースの隠面消去を実行するために私が見つけた最も一般的な手法は、理論上はうまく動作するBSPツリーを使用することです。だから私はそれを実装しましたが、パフォーマンスは遠隔から受け入れられませんでした.O(n )の複雑さを考えると、全く驚くことではありません。私が使っているテストシーンには、背面のカリング後に約4800の三角形がありますが、その数は約5倍から10倍のシーンを処理する必要があります。ジオメトリライブラリの(不足している)スピードは、正確には役に立ちません。

これまで、O(n-)の影響を減らすために、小さいグループの三角形を分割するという考え方に基づいて、このパフォーマンスの問題を回避するさまざまな方法を試みました。 (ポリゴンの半分以上がルートノードに格納されていました)、2次元投影されたシーンを10x10グリッドで分割して、1平方あたりの三角形の数を減らしました(動作しますが、ポリゴンの交点の減少は、 100回)。

今日私は、すべての三角形を2Dに投影し、どの四角形が重なり合っているかを最初にテストし、次に2つのポリゴンの各組み合わせに対して各エッジの交差点(3x3 = 9)をテストすることによって交差しています。線の交差については、hereと記載されたアルゴリズムを使用してジオメトリライブラリをバイパスしました。合計で約11​​60万本の交差点が実行されていますが、これはまだ30秒しかかかりません(絶対最大実行時間は約5秒です)。これはアルゴリズムの一部にすぎません。

私はこのパフォーマンスの問題を解決する方法に関するアイデアがなくなり始めており、より良いアルゴリズムのための良いアイデアがあることを期待していました。私が考えることができるものはすべてO(n )です。

+0

あなたはいくつかのより多くの実装仕様(言語、するライブラリなどを...)を提供することができますか? – ChristopheD

+0

2Dビューで実際に表示されるサーフェスの一般的な数はいくつですか? – ElKamina

+0

私はC#で働いています。ジオメトリライブラリは、私が働く会社によって書かれたもので、オープンソースではありません。また、C#で書かれており、非常に高速な方法ではありませんが、ポリゴンの交差などの基本的な操作をサポートしています。私はちょうどそれを無視して、直接、必要であれば、三角形のポイントのx軸、y軸およびz-coordiantesで動作することができますので、幾何学ライブラリは、しかし、特に重要ではありません。私は言語が大事だとは思わない。問題は主にアルゴリズムの1つです。任意のソリューションをC#に移植するのはかなり簡単です。 – FalconNL

答えて

0

修正されたBresenhamアルゴリズムを使用します。このアルゴリズムでは、すべてのピクセルが交差する線を計算します(多分このアルゴリズムは名前がbtwです)。完全な方法は次のようになります。

  1. (のは、1000×1000の細胞を言わせて)nおよびmは非常に大きいと、(グリッドあたりのポリゴンのソートされたリストで)n x m空間インデックスを作成します。
  2. 投影されたポリゴンごとに、上記の「修正されたBresenhamアルゴリズム」を使用して、交差するすべてのセルにポリゴンを追加します。
  3. 各セルのすべてのペアを調べることで、可能なポリゴンの交点のペアのセットを作成します。
  4. 前の手順で見つかった可能性のあるペアについてのみ、実際の交差テストを行います。

手順3では、潜在的な交差点の数を最大限に減らすようにしてください。ステップ2はO(n)であり、小さいポリゴン(少数の交差セル)ではかなり高速でなければならない。

空間インデックスのグリッドサイズを動的に調整して、以前の結果やヒューリスティックを全体のポリゴン数、平均ポリゴンサイズなどに基づいて調べることもできます。

+0

ええ、私はすでにグリッドベースの細分化メソッドを試しました(セル数は減りましたが)。残念ながら、質問(窓枠)内の形状は、グリッドベースappraochが実際に仕事の量を増加させることを意味し、最もポリゴンがエッジに位置するようなものです。私たちは、3Dベースのアルゴリズムを放棄し、ウィンドウの個々の部分のビューからビューを構成することを決定した許容可能なパフォーマンスをもたらすために、管理と最適化の無い量は私が出てくる可能性があります。 – FalconNL

1

私は少し遅れて相手にしていますが、これは私の提案は、影のマトリックスを使用することで、あなたから3Dシーンの2D表現を持っている道平面上にジオメトリを投影します解決されなかった場合まだ空間/ピクセルをスクリーンすることなく、与えられた方向性

関連する問題