【问题标题】:How to represent a 3D .obj object as a 3D array?如何将 3D .obj 对象表示为 3D 数组?
【发布时间】:2016-10-20 03:34:27
【问题描述】:

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

我想我会切片对象并将切片导出到图像。然后我会在 opencv 中使用这些图像为每个切片构建数组。最后,我将组合所有切片的所有数组,最终获得我的 .obj 文件的 3D 数组表示。但我中途放弃了,因为让图像切片相互对齐是一个痛苦的漫长过程。

是否有任何其他基于索引的表示可以用来在代码中表示 3D 模型?

3D 数组对我的目的来说非常方便。

【问题讨论】:

    标签: python c++ arrays opencv 3d


    【解决方案1】:

    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)
    

    【讨论】:

      【解决方案2】:

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

      我会使用上面推荐的 OBJ 文件加载器之一将模型导入 OpenGL 程序。沿 XYZ 旋转和缩放到您想要的任何对齐方式。

      然后使用片段着色器绘制对象,该着色器丢弃 Z = 0.002 的任何像素(或任何有效的分辨率 - 我只是试图解释该方法)。这为您提供了您存储或保存的第一个图像切片。这次清除并再次绘制,丢弃 Z = 0.003 ......因为它是相同位置的相同模型,所以所有切片都将对齐。

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

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        PyGame 有一个 OBJFileLoader 类。 PyWavefront 有一个 3D 对象模型。

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-17
        • 2018-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-21
        • 2017-03-10
        • 1970-01-01
        相关资源
        最近更新 更多