2

私のアプリケーションでは、ユーザー入力から取得した複雑な3Dソリッド(シリンダーブロックなど)の形状と寸法があります。そのための頂点とインデックスのバッファを構築する必要があります。

寸法はユーザー入力から取得されるため、Blenderまたは3DMaxを使用してモデルを手動で作成することはできません。そのようなメッシュを動的に生成するための教科書の方法は何ですか?

頂点、エッジ、穴を指定して三角形を生成するものを探しています。TetGenのようなものですが、TetGenには、ソリッド/メッシュの内部にある三角形を除外する方法がありません。

4

3 に答える 3

1

頂点の配列を作成する必要があるように聞こえます。三角形のリストには、頂点配列への3つのインデックスのリストが含まれています。これを行う簡単な方法はありません。ボックスを描画するには、8つのベティックと12の三角形(1辺に2つ)が必要です。一部の表現では、明示的なエッジ表現も使用されます。これはあなたがやりたいよりもずっと多くの仕事だと思います.....

必要なのは、CSG(複合ソリッドジオメトリ)を実行できるメッシュライブラリです。このようにして、ブロックの寸法を指定し、次に円柱の寸法を指定して、それらを切り取るように指示できるはずです(CSGの違い)。すべての頂点と三角形の管理はあなたのために行われるべきです。結局、そのようなライブラリはメッシュをいくつかの一般的な形式にエクスポートできるはずです。ここでの唯一の問題は、そのようなライブラリの名前がわからないことです。スクリプトを作成する方法を知っていれば、Blenderは実際にこれらすべてを実行できるとのことです。また、かなり良いライブラリが1つか2つあるのではないかと思います。

Googleは実際にこれでStackOverflowに戻ってきました:

優れた3Dメッシュライブラリ

メッシュを作成するための関数が提供されていない場合は、最終的にプログラムで単純なメッシュを生成し、ライブラリで操作する必要があります(メッシュの操作やCSGの実行についてはすべて話し合っています)。

于 2010-05-11T12:57:39.567 に答える
0

それはあなたの要件に少し依存します。

生成後にメッシュにアクセスする必要はなく、レンダリングするだけでよい場合、最速のオプションは、で頂点バッファを作成し、glGenBuffersでメモリにマップしglMapBuffer、データをバッファに書き込んでから、でマップを解除することglUnmapBufferです。すべてのデータをビデオカードのメモリにアップロードできるため、描画は非常に高速になります。

メッシュデータを生成した後にアクセスする必要がある場合、または定期的に変更する予定の場合は、頂点データを通常の配列で構築し、頂点配列をglVertexPointer友人と一緒に使用する方がよい場合があります。

組み合わせを使用することもできます。メインメモリでメッシュデータを生成しmemcpy()てから、マップされた頂点バッファにデータを生成します。

最後に、「寸法」とは、全体をスケーリングすることを意味する場合、任意の3Dモデリングプログラムでオフラインで作成し、たとえばglScale、OpenGL変換を使用して、レンダリング中に寸法をメッシュに適用できます。

于 2010-05-11T12:27:00.350 に答える
0

マーチングキューブアルゴリズムが役立つかどうかわかりません。

于 2010-06-07T15:28:03.200 に答える