将3D模型分解为矩阵的最佳方法

时间:2014-05-21 22:28:50

标签: 3d geometry minecraft 3d-modelling

我想拍摄一个3D模型,我可以用像搅拌器,草图等一样的东西,然后将它分成三维矩阵。

你可以说我想“Minecraftise”是一个随意的对象。 (除非是模拟)

一个例子:这是一个带有半球形末端的离散圆柱体:

enter image description here

我目前的想法是获取描述对象的顶点列表,并查看它们将占据矩阵中的哪些单元格,然后将其标记为对象占用。

1)这是一个好方法吗?

2)如果是这样,最简单的模型格式可以用来完成这项任务,是否有一些标准的高质量库?

由于

1 个答案:

答案 0 :(得分:1)

  1. 为您的模型直接创建渲染引擎到3D矩阵不在屏幕上(体积渲染

    使用自己的软渲染或 OpenGL + GLSL 或其他......

  2. 清除矩阵

    空白

  3. 将您的模型渲染为矩阵

    没有CULL_FACE删除,没有Z buffer没有PERSPECTIVE预测!!!

  4. 填充网格内部

    为矩阵的每一行投射光线,并设置为填充所有内部的光线。射线体素开始时在外面,当你击中任何填充的体素时,它就在那个点之内。当你再次击中任何填充的体素时,它就在那个点之外,依此类推......

  5. 在软件渲染中,写入像素如下所示:

    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 示例: