有什么方法可以将3D模型表示为3D阵列?是否有任何库将.obj或.blend文件作为输入并给出相同的数组表示?
我以为我会切片对象并将切片导出到图像中。然后我会在opencv中使用这些图像为每个切片构建数组。最后,我将组合所有切片的所有数组,最终获得我的.obj文件的3D数组表示。但是我放弃了一半,因为让图像切片彼此对齐是一个痛苦的漫长过程。
我可以使用其他基于索引的表示来代表代码中的3D模型吗?
3D阵列对我来说非常方便。
答案 0 :(得分:2)
Binvox可用于从 .obj 文件生成3D模型的体素表示。
Binvox-rw-py可用于读取和解析上面生成的 .binvox 文件。
这是我以前用来获得一个numpy数组的东西:
>>> import binvox_rw
>>> with open("chair.binvox","rb") as f:
... ml = binvox_rw.read_as_3d_array(f)
...
>>> type(ml.data)
<type 'numpy.ndarray'>
>>> ml.data.shape
(32, 32, 32)
答案 1 :(得分:1)
PyGame有一个OBJFileLoader类。 PyWavefront有一个3D对象模型。
答案 2 :(得分:1)
如果我理解正确,您想要创建3D模型的体素表示吗?像可见的人类显示器?
我会使用上面推荐的一个OBJ文件加载器将模型导入OpenGL程序。旋转并缩放到XYZ所需的任何对齐方式。
然后使用片段着色器绘制对象,该片段着色器丢弃任何Z <0的像素。 0.001或Z> = 0.002(或任何分辨率起作用 - 我只是试图解释该方法)。这将为您提供存储或保存的第一个图像切片。这次清除并再次绘制,丢弃Z&lt; 0.002或Z&gt; = 0.003 ...因为它在同一位置是相同的模型,所有切片都将对齐。
但是,您是否知道OBJ(以及几乎所有其他3D格式)都是表面描述,而不是实体?它们像折纸模型一样在里面凹陷。因此,您的3D数组表示将基本为空。
希望这有帮助。