PyViz3D / 文档 / 示例代码

示例代码

覆盖所有支持数据类型的完整示例代码,可直接复制运行。

点云可视化

彩色点云,支持逐点颜色、法向量和大小设置。

import pyviz3d as viz import numpy as np v = viz.Visualizer() # 基本用法:位置 + 颜色 points = np.random.rand(5000, 3) * 5 colors = np.random.rand(5000, 3) v.add_points("随机点云", points, colors) # 带法向量的点云(影响光照着色) normals = np.random.rand(5000, 3) * 2 - 1 v.add_points( name="带法向量的点云", positions=points, colors=colors, normals=normals ) # 固定大小点(用于远处小目标) v.add_points( name="小点云", positions=points[:100], colors=colors[:100], normal_scale=1.0, # 控制点大小 point_size=3 # 固定像素大小 ) v.save("point_cloud_demo")

多边形网格

加载 .obj 或 .ply 格式的 3D 网格模型。

import pyviz3d as viz import numpy as np # 方式一:手动提供顶点和面索引 vertices = np.array([ [0,0,0], [1,0,0], [0,1,0], [0,0,1], [1,0,1], [0,1,1], ]) faces = np.array([[0,1,2], [3,4,5]]) v = viz.Visualizer() v.add_mesh( name="立方体", vertices=vertices, faces=faces, colors=np.array([1,0,0]) # 红色 ) v.save("mesh_demo")

边界框

支持轴对齐边界框(AABB)和带旋转的 OBB。

v = viz.Visualizer() # 轴对齐边界框 positions = np.array([ [0, 0, 0], [2, 1, 0], [-1, 2, 1], ]) sizes = np.array([ [1, 1, 1], [0.5, 2, 0.5], [2, 0.5, 3], ]) colors = np.array([ [1, 0, 0], # 红 [0, 1, 0], # 绿 [0, 0, 1], # 蓝 ]) v.add_boxes( name="检测框", positions=positions, sizes=sizes, colors=colors, alpha=0.2 # 透明度 ) # 带旋转的边界框 v.add_boxes( name="旋转框", positions=np.array([[3,0,0]]), sizes=np.array([[2,1,1]]), colors=np.array([[1,1,0]]), # 黄色 rotations=np.array([[0, 0, 45]]), # 绕 Z 轴旋转 45° alpha=0.4 ) v.save("boxes_demo")

箭头

用于表示向量、方向和运动。

v = viz.Visualizer() # 单个箭头:从位置沿向量延伸 v.add_arrows( name="速度向量", positions=np.array([[0, 0, 0]]), vectors=np.array([[2, 1, 1]]), # 方向和长度 colors=np.array([[0, 1, 0]]) # 绿色 ) # 多个箭头(表示多个方向) origin = np.array([[0,0,0], [0,0,0], [0,0,0]]) directions = np.array([ [1,0,0], # X 轴 [0,1,0], # Y 轴 [0,0,1], # Z 轴 ]) colors = np.array([[1,0,0], [0,1,0], [0,0,1]]) v.add_arrows("坐标轴", origin, directions, colors) v.save("arrows_demo")

标签

始终面向相机的 HTML 标签,适合标注物体和信息。

v = viz.Visualizer() v.add_points("标注点", np.array([[0,0,0]]), np.array([[1,0,0]])) # 添加文字标签 v.add_text( name="文字标签", text="这是起点", positions=np.array([[0, 0.5, 0]]), # 标签位置 colors=np.array([[1, 1, 0]]) # 黄色 ) # 多个标签 labels = ["物体 A", "物体 B", "物体 C"] positions = np.array([[0,0,0], [2,0,0], [0,2,0]]) colors = np.ones((3, 3)) v.add_text("物体标签", labels, positions, colors) v.save("labels_demo")

多段线

连接线段,常用于轨迹可视化、路径规划、建筑平面图。

v = viz.Visualizer() # 轨迹线(样条曲线) t = np.linspace(0, 4*np.pi, 200) trajectory = np.column_stack([ np.cos(t), np.sin(t), t/10 ]) v.add_polygon( name="螺旋轨迹", vertices=trajectory, colors=np.array([0, 1, 1]), # 青色 alpha=1.0 ) # 闭合多边形(地面轮廓) square = np.array([ [0,0,0], [3,0,0], [3,2,0], [0,2,0], [0,0,0], ]) v.add_polygon( name="建筑平面", vertices=square, colors=np.array([1, 0.5, 0]), # 橙色 alpha=1.0 ) v.save("polyline_demo")

超二次曲面

参数化形状,支持锥化、弯曲与线框模式,适合表示近似椭球体。

v = viz.Visualizer() # 基本超二次曲面 v.add_superquadrics( name="椭球体", positions=np.array([[0,0,0]]), parameters={ 'epsilon': [0.5, 0.5], # 圆润度参数 'size': [1.0, 0.8, 0.6], # 各轴缩放 'color': [1, 0.3, 0.8], # 粉紫色 } ) # 锥化超二次曲面(类似金字塔) v.add_superquadrics( name="锥化形状", positions=np.array([[2,0,0]]), parameters={ 'epsilon': [0.1, 0.1], 'taper': [0.3, 1.0], # 底部窄顶部宽 'color': [0.3, 0.8, 1], # 天蓝色 }, wireframe=True # 线框模式 ) v.save("superquadric_demo")

运动轨迹

带动画的箭头,适合展示物体运动方向和速度。

v = viz.Visualizer() # 运动箭头:从起点到终点 v.add_motion_arrows( name="运动轨迹", positions=np.array([[0,0,0], [2,1,0]]), vectors=np.array([[1,0.5,0], [0.5,0.5,0]]), colors=np.array([[1,0,0], [0,1,0]]), head_shaft_ratio=0.9, head_width_ratio=0.3 ) v.save("motion_demo")

相机动画

录制相机轨迹,导出为视频或 GIF。

v = viz.Visualizer() v.add_points("cloud", points, colors) # 录制圆形相机轨迹 v.set_camera_animation( mode="circle", # 或 "spline" radius=15, height=5, look_at=[0, 0, 0], frames=120, # 帧数 seconds=6 # 时长(秒) ) # 保存为图片序列(用于 ffmpeg 转视频) v.save_animation("frames/output_", width=1920, height=1080) # Blender 导出(高质量) v.save_blender("output.blend", animation=True)