2010-11-27 29 views
7

クワッドの配列をボクセルフィールドに変換するコードを書く必要があります。 作業を簡単にする必要がありますが、速くすることは些細なことではありません。3Dモデルをボクセルフィールドに変換する

誰でも使用できるライブラリやソースコードを知っていますか?私は誰かが前にこれをやったに違いないと確信しています。

編集: アルゴリズムは、ボクセルもモデルの内側に塗りつぶす必要があります。ちょうどシェルはしません。

+1

["クワッド"](http://en.wikipedia.org/wiki/Quad)の意味を指定すると便利です。 –

+2

「ボクセル化」のためのいくつかの素早いgoogleは、多くのことを示しています。これを見てください。http://www.cs.princeton.edu/~min/binvox/ –

+0

@sven in graphics、 'クワッド'は、通常、4つの同一平面の頂点によって定義される形状を意味します。 –

答えて

7

@Alexandre C.によって投稿されたボクセルリンク。

ここでは、フォトニクス/ EMシミュレーションのための標準的なクワッド/トライアングルモデルを屈折率/イプシロン値の立方体配列に変換する際にこの問題をどのように解決したかについて簡単に説明します。

  1. シーンのBSPツリーを作成します。 (はい、実際には)
  2. モデルまたはソリューション空間でX、Y、Zに一定間隔で反復します。
  3. x/y/zループ内の各ポイントで、そのポイントをBSPツリーと照合して確認してください(各軸の間隔は、希望するボクセルの寸法と同じでなければなりません)。エンティティの内部にある場合は、その時点でボクセルを作成し、ソースモデル(BSPノードから参照される)に基づいてその属性(色、テクスチャ座標など)を設定します。 )最適化のヒント:最も内側のループがY軸(垂直軸)に沿っていて、地形またはXZ面を作成している場合は、ボクセルを作成するたびにYループを終了できます。

  4. 保存

  5. Profit!

BSPをビルドするのは、唯一の半複雑な部分です(一見するよりもはるかに簡単です)。しかし、Web上のすべての陽陽を文書化しています。これは、ほぼすべてのモデルシェイプで機能し、特に衝突検出や可視性の判定などに使用できる素敵なツリーを提供します。

また、コンパイル時または専用ツール(実行時に使用するツリーフィールドとボクセルフィールドを含むファイルを生成する)を使用して、このプロセス全体を実行する必要があります。 XNAを使用している場合は、コンテンツパイプラインに何かをインポートするのはかなり簡単です。

+0

私は以前に触れたはずですが、モデルの内部もボクセルで塗りつぶす必要があります。私は別のポリを打つまで、ポリを打った後にボクセルを追加し続けることができますが、表面は閉じていると仮定しますか? – Hannesh

+0

私はいいえいいえ。 5! +1! – jwueller

+0

@Hanneshはい。 BSPは、あなたがチェックした各ポイントの "内側"または "外側"の結果を与えます。モデルの中にいたら、ボクセルの作成をやめる必要はなく、あるモデルがどこで停止し、次のモデルが始まるのかを意識する必要はありません。このアプローチの良い点は、与えられたXYZ値に対して、その周りに起こっていることを知る必要はないということです。 –

1

チェックMarching cubesalgorithm。私はあなたの問題の文脈でそれを逆にする必要があると思います!);

+0

私はそれがモデルの外殻以外のもので働いているとは思いません。 – Hannesh

関連する問題