モデルのレンダリング エンジンを画面上ではなく 3D マトリックスに直接作成する (ボリューム レンダリング)
独自のソフトレンダリングまたはOpenGL + GLSLなどを使用してください...
クリアマトリックス
空の色で
モデルをマトリックスにレンダリングする
CULL_FACE
除去なし、Z buffer
遠近法の投影なし!!!
メッシュの内側を埋める
行列の各行にレイをキャストし、内部にあるすべての行を塗りつぶしたものとして設定します。光線の開始時にボクセルは外側にあり、塗りつぶされたボクセルにヒットすると、その時点から内側になります。塗りつぶされたボクセルをもう一度ヒットすると、そのポイントの外側になります...
ソフトウェア レンダーでは、書き込みピクセルは次のようになります。
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の例があります: