我想拍摄一个3D模型,我可以用像搅拌器,草图等一样的东西,然后将它分成三维矩阵。
你可以说我想“Minecraftise”是一个随意的对象。 (除非是模拟)
一个例子:这是一个带有半球形末端的离散圆柱体:
我目前的想法是获取描述对象的顶点列表,并查看它们将占据矩阵中的哪些单元格,然后将其标记为对象占用。
1)这是一个好方法吗?
2)如果是这样,最简单的模型格式可以用来完成这项任务,是否有一些标准的高质量库?
由于
答案 0 :(得分:1)
为您的模型直接创建渲染引擎到3D矩阵不在屏幕上(体积渲染)
使用自己的软渲染或 OpenGL + GLSL 或其他......
清除矩阵
空白
将您的模型渲染为矩阵
没有CULL_FACE
删除,没有Z buffer
和没有PERSPECTIVE预测!!!
填充网格内部
为矩阵的每一行投射光线,并设置为填充所有内部的光线。射线体素开始时在外面,当你击中任何填充的体素时,它就在那个点之内。当你再次击中任何填充的体素时,它就在那个点之外,依此类推......
在软件渲染中,写入像素如下所示:
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 示例: