通过 .ply 格式将 3D 点导出到 Blender 会创建一个空对象,而它在 MeshLab 中工作

Posted

技术标签:

【中文标题】通过 .ply 格式将 3D 点导出到 Blender 会创建一个空对象,而它在 MeshLab 中工作【英文标题】:Exporting 3D points to Blender via the .ply format creates an empty object, while it works in MeshLab 【发布时间】:2022-01-15 02:54:12 【问题描述】:

我制作了一个 Python 脚本来使用图像和 3D 扫描点云创建一个 .ply 文件,存储为 NumPy 数组。

我可以在 MeshLab 中打开生成的 file.ply。效果很好。

但是当我在 Blender 中导入它时,没有意义。结果对象为空。

你知道如何解决这个问题吗?

谢谢

    def row_col_xyz_to_ply(self, xyz, rgb, name="output"):
            """Convers a numpy (row, col, xyz) cloud of points to ply format
    
                Parameters:
                xyz (NDArray): 3D points for each image pixel (row, col, (x,y,z))
                rbg (NDArray): RGBA values for each image pixel (row, col, (r,g,b,a))
    
                Returns:
                None: save the .ply file on the disk instead
            """
            
            # reshape
            # Extract the coordinates of the points where there is actual values (not NaN) in the xyz cloud of points
            points_rows, points_cols = np.where(~np.isnan(xyz[:,:,0]))
    
            # Grab the corresponding points in the xyz cloud of points in an array
            points_xyz = xyz[points_rows,points_cols,:] # n*3 array of 3D points (after nan filtering)
    
            # Grab the corresponding points in the image in an array
            points_image =  rgb[points_rows,points_cols,0:3] # n*3 array of RGB points (after nan filtering)
    
            # Create a dict of data
            data = 
                'x':     points_xyz[:,0],
                'y':     points_xyz[:,1],
                'z':     points_xyz[:,2], 
                'red':   points_image[:,0],
                'green': points_image[:,1],
                'blue':  points_image[:,2]
            
            
            # Convert it to a cloud of points
            cloud = PyntCloud(pd.DataFrame(data=data))
    
            # Path where to save it
            filename = f"name.ply"
            path = os.path.join(self.path_exports,filename)
            
            # Save it
            cloud.to_file(path)
    
            # Debug
            print("row_col_xyz_to_ply > saved: ",filename)

【问题讨论】:

【参考方案1】:

问题出在搅拌机 .ply 导入器中。它不支持任何三角形未使用的点。

【讨论】:

以上是关于通过 .ply 格式将 3D 点导出到 Blender 会创建一个空对象,而它在 MeshLab 中工作的主要内容,如果未能解决你的问题,请参考以下文章

3D模型在线查看利器多种格式

surfer如何导出三维gltf文件

blender导出mesh

如何从 Blender 导出到 unity3d

MeshLab中进行点云配准

CSS3D 矩阵生成