全真互联网时代,需要大量的应用3D效果。在python中,利用Open3D包可以创建3D效果图。
首先pip install open3d下载安装包。下载要显示的.ply文件。
PLY文件格式是Stanford大学开发的一套三维mesh模型数据格式,图形学领域内很多著名的模型数据,比如Stanford的三维扫描数据库(如本文用到的Bunny兔子),Geogia Tech的大型几何模型库,北卡(UNC)的电厂模型等,最初的模型都基于这个格式。
三维模型建立在点的基础上,首先读取点云数据,创建一个基本的点云图。
import open3d as o3d
import numpy as np
#读点云数据
pcd = o3d.io.read_point_cloud(r"C:\Users\95378\Python2021\open3d_data\bunny10k.ply")
print(pcd)
o3d.visualization.draw_geometries([pcd],width=800,height=600)
#o3d.io.write_point_cloud(r"C:\Users\95378\Python2021\open3d_data\newbunny.pcd",pcd)
运行结果:
在法向量估计的基础上,可以生成一个清晰的三角片面。
import open3d as o3d
# import open3d_tutorial as o3dtut
import numpy as np
print("Open3D read Point Cloud")
pcd = o3d.io.read_triangle_mesh(r"C:\Users\95378\Python2021\open3d_data\bunny10k.ply") #newrabbit.pcd")
print(pcd)
pcd.compute_vertex_normals()
pcdmesh = pcd.sample_points_poisson_disk(3000)
o3d.visualization.draw_geometries([pcdmesh],point_show_normal=True)
radii=[0.005, 0.01, 0.02, 0.04]
ballmesh = o3d.geometry.TriangleMesh.create_from_point_cloud_ball_pivoting(pcdmesh,o3d.utility.DoubleVector(radii))
print(ballmesh)
o3d.visualization.draw_geometries([ballmesh])
o3d.visualization.draw_geometries([pcd, ballmesh])
运行结果:
还可以创建图形
mesh = o3d.geometry.TriangleMesh.create_sphere() #创建球体
mesh.compute_vertex_normals()
o3d.visualization.draw_geometries([mesh])
pcd = mesh.sample_points_uniformly(number_of_points=500)
o3d.visualization.draw_geometries([pcd])
运行结果: