2017-03-01 2 views
0

オブジェクトごとに特定の数のメッシュしか処理できないアプリにメッシュをインポートする必要があります。そのため、すべてのピクチャが最大頂点数を下回るまで、メッシュをいくつかの部分に分割しなければなりません。実行時に分割が発生するため、外部アプリケーションを使用してメッシュを分割することはできません。どのようにしてメッシュを分割して、すべてが与えられた数の頂点より小さくなるようにすることができますか?

メッシュ分割の必要はありませんが、すべての面、法線、UVを保存する必要があります。

そうすることができるアルゴリズムはありますか?

+0

、メッシュが作るん使用?それは三角測量ですか?そうであれば、現在のインデックスが指し示す各​​頂点を新しい小さなメッシュにコピーして、インデックス全体を反復することができます。新しいメッシュの頂点数がmax_vertex_count - 3より大きい場合、そのメッシュを「終了」します。 –

+0

@kirkroerigはい、メッシュは三角形分割されています。これは頂点の順序付きリストの形であり、それぞれがそのuv座標を含みます。面は、ベクトルリストの3つのインデックスのグループとして定義されます。三角形は相関関係はありませんが、例えば、インデックス0,300,1534の三角形を持つことができます。 – kace91

答えて

0

三角隣接グラフを使用する必要があります。三角形から始めて、それを訪問してください。次に、各三角形の側面から、訪問していない隣接する三角形を移動し、それらを訪問したことをマークします。頂点数が限界に達すると、新しいメッシュを作成し、最初からやり直します。

0

コード化が簡単であり、合理的に良い結果をもたらす可能性は、三角形を空間的に並べ替えることです。ヒルベルトの並べ替え[1]。次に、三角形の順序付きリストをトラバースし、それらをn個の要素のクラスタにグループ化し、メッシュの異なる部分を生成します。実装はGEOGRAMプログラミングライブラリ[2]で利用できます。関数mesh_partition()[3]を参照してください。部品の「コンパクトさ」を最適化したい場合(つまり、各部品の接続部品数を最小限に抑えたい場合)、METIS [4]やSCOTCH [5]などのグラフ分割アルゴリズムを使用して、ファセット(ファセットごとのノードと、隣接するファセットの各対を接続するエッジとを有する)。しかし、それは(時間とメモリ消費の両方の点で)より高価です。インデックスの

[1] https://en.wikipedia.org/wiki/Hilbert_curve

[2] http://alice.loria.fr/software/geogram/doc/html/index.html

[3] http://alice.loria.fr/software/geogram/doc/html/mesh__partition_8h.html

[4] http://glaros.dtc.umn.edu/gkhome/metis/metis/overview

[5] http://www.labri.fr/perso/pelegrin/scotch/

関連する問題