如何将3D .OBJ对象表示为3D数组



是否有任何方法可以将3D模型表示为3D数组?是否有任何库将.OBJ或.blend文件列为输入并给出相同的数组表示?

我认为我会切片对象并将切片导出到图像。然后,我将使用OpenCV中的这些图像为每个切片构建数组。最后,我将结合所有切片的所有数组,以最终获得我的.OBJ文件的3D数组表示形式。但是我放弃了一半,因为这是一个痛苦的过程,可以使图像彼此对齐。

我可以用其他基于索引的表示形式来表示代码中的3D模型?

3D阵列对于我的目的非常方便。

binvox可用于从a .obj 文件中生成3D模型的体素表示。

binvox-rw-py可用于读取和解析上述生成的文件。

这是我用过一个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)

pygame具有一个objfileleleoader类。PywaveFront具有3D对象模型。

如果我正确理解,您想创建3D模型的体素表示吗?像可见的人类显示器一样?

我将使用上面推荐的OBJ文件加载程序之一将模型导入OpenGL程序。旋转并扩展到您想要的任何对齐方式。

然后用片段着色器绘制对象,该片段着色器将任何像素都用z&lt丢弃;0.001或z> = 0.002(或任何解决方案 - 我只是想解释该方法)。这为您提供了您存储或保存的第一个图像切片。这次清除并再次绘制丢弃Z&LT;0.002或z> = 0.003…因为它是相同位置的同一模型,所以您的所有切片都会对齐。

但是,您是否知道OBJ(以及几乎所有其他3D格式)是表面描述,而不是固体?它们像折纸模型一样在内部空心。因此,您的3D数组表示形式将大部分为空。

希望这会有所帮助。

最新更新