You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Open3D的SceneWidget中实现相机视角的保存与恢复?

在Open3D SceneWidget中实现视角的保存与恢复

核心思路

不用纠结实例化Camera类,SceneWidget的视角由ViewControl对象统一管理,直接通过它就能获取和设置所有需要的视角参数,和draw_geometries复制的参数完全对应。

1. 保存视角参数

从Open3DScene的ViewControl中提取关键参数,可保存为字典或序列化到文件:

import open3d as o3d
import json

def save_view_parameters(scene_widget, save_path="view_params.json"):
    # 获取场景的ViewControl对象
    view_ctrl = scene_widget.scene.get_view_control()
    # 获取场景包围盒
    bbox = scene_widget.scene.get_bounding_box()
    
    # 提取所有视角参数
    view_params = {
        "boundingbox_min": bbox.min_bound.tolist(),
        "boundingbox_max": bbox.max_bound.tolist(),
        "field_of_view": view_ctrl.get_field_of_view(),
        "front": view_ctrl.get_front().tolist(),
        "lookat": view_ctrl.get_lookat().tolist(),
        "up": view_ctrl.get_up().tolist(),
        "zoom": view_ctrl.get_zoom()
    }
    
    # 保存到JSON文件
    with open(save_path, "w") as f:
        json.dump(view_params, f, indent=4)

2. 恢复视角参数

加载保存的参数,通过ViewControl的方法逐一设置,最后强制刷新场景:

def load_view_parameters(scene_widget, load_path="view_params.json"):
    # 加载保存的参数
    with open(load_path, "r") as f:
        view_params = json.load(f)
    
    view_ctrl = scene_widget.scene.get_view_control()
    
    # 逐一设置视角参数
    view_ctrl.set_front(o3d.core.Tensor(view_params["front"]))
    view_ctrl.set_lookat(o3d.core.Tensor(view_params["lookat"]))
    view_ctrl.set_up(o3d.core.Tensor(view_params["up"]))
    view_ctrl.set_zoom(view_params["zoom"])
    view_ctrl.set_field_of_view(view_params["field_of_view"])
    
    # 可选:同步包围盒(部分场景需此步骤保证视角匹配)
    bbox_min = o3d.core.Tensor(view_params["boundingbox_min"])
    bbox_max = o3d.core.Tensor(view_params["boundingbox_max"])
    scene_widget.scene.set_bounding_box(o3d.geometry.AxisAlignedBoundingBox(bbox_min, bbox_max))
    
    # 强制刷新场景,确保视角立即生效
    scene_widget.force_redraw()

适配draw_geometries复制的参数

如果是从draw_geometries复制的参数(比如直接复制到记事本的文本),只需把文本转换成Python字典格式,就能直接套用上面的恢复逻辑——参数名称和格式完全对应,无需额外适配。

内容的提问来源于stack exchange,提问作者VlassisFo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 02:00:34