如何将一个3D .obj对象表示为3D数组?

5
有没有一种方法可以将3D模型表示为3D数组?有没有库可以将.obj或.blend文件作为输入,并给出相同的数组表示?
我认为我可以对对象进行切片并将切片导出为图像。然后,我将在opencv中使用这些图像来为每个切片构建数组。最后,我将结合所有切片的所有数组,最终获得我的.obj文件的3D数组表示。但是我放弃了一半,因为要使图像切片彼此对齐是一个痛苦的漫长过程。
有没有其他基于索引的表示方法可以用于在代码中表示3D模型?
对于我的目的来说,3D数组非常方便。
3个回答

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

这篇文章看起来也许可以解释如何做你想要的事情:http://www.nandnor.net/?p=86 - Dan

1
如果我理解正确,您想创建三维模型的体素表示?类似于可见人显示吗?
我会使用上面推荐的OBJ文件加载器之一将模型导入OpenGL程序中。沿XYZ旋转和缩放到所需的任意位置。
然后,使用片段着色器绘制对象,丢弃任何Z < 0.001或Z >= 0.002(或任何有效分辨率 - 我只是尝试解释该方法)。这给您第一个图像切片,可以存储或保存。清除并再次绘制,这次丢弃Z < 0.002或Z >= 0.003 ...因为它是相同的模型在相同的位置,所有切片都将对齐。
但是,您是否知道OBJ(以及几乎所有其他3D格式)是表面描述,而不是实体?它们像折纸模型一样内部为空。因此,您的三维数组表示将大多为空。
希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接