1

ブレンダー、スケッチアップなどで作成できる 3D モデルを取得し、それを 3D マトリックスに離散化したいと考えています。

任意のオブジェクトを「マインクラフト化」したかったと言えます。(シミュレーション用を除く)

例: 半球状の端を持つ離散化された円柱を次に示します。

ここに画像の説明を入力

私の現在のアイデアは、オブジェクトを説明する頂点のリストを取得し、それらが占めるマトリックス内のセルを確認し、オブジェクトによって占有されているものとしてマークすることです。

1)これは良いアプローチですか?

2)もしそうなら、このタスクを達成するために最も簡単なモデル形式は何ですか?標準的な高品質のライブラリはありますか?

ありがとう

4

1 に答える 1

1
  1. モデルのレンダリング エンジンを画面上ではなく 3D マトリックスに直接作成する (ボリューム レンダリング)

    独自のソフトレンダリングまたはOpenGL + GLSLなどを使用してください...

  2. クリアマトリックス

    空の色で

  3. モデルをマトリックスにレンダリングする

    CULL_FACE除去なし、Z buffer遠近法の投影なし!!!

  4. メッシュの内側を埋める

    行列の各行にレイをキャストし、内部にあるすべての行を塗りつぶしたものとして設定します。光線の開始時にボクセルは外側にあり、塗りつぶされたボクセルにヒットすると、その時点から内側になります。塗りつぶされたボクセルをもう一度ヒットすると、そのポイントの外側になります...

ソフトウェア レンダーでは、書き込みピクセルは次のようになります。

DWORD scr[ys][xs],DWORD zed[ys][xs]; // screen and Z buffers xs,ys is resolution

void setpixel(DWORD x,DWORD y,DWORD z,DWORD color) // x,y,z, are already projected
 {
 if ((x>=0)&&(x<xs)) // cut off out of screen pixels
  if ((y>=0)&&(y<ys))
   if (z<=zed[y][x]) // test Z buffer
    scr[y][x]=color; // write color to pixel
 }

したがって、これを次のように変更します。

DWORD vox[zs][ys][xs]; // voxel buffer (your 3D matrix)

void setpixel(DWORD x,DWORD y,DWORD z,DWORD color) // x,y,z, are already projected
 {
 if ((x>=0)&&(x<xs)) // cut off out of volume pixels
  if ((y>=0)&&(y<ys))
   if ((z>=0)&&(z<zs))
    vox[z][y][x]=color; // write color to voxel
 }

OpenGL では、テクスチャの配列に描画したり、3D テクスチャを使用したりできます。DirectXは使用していませんが、そこでも実現できると思います。ここに私のGLSLの例があります:

于 2014-05-22T05:34:08.050 に答える