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

如何从同一固定视角渲染点云各部分 避免自动居中缩放

问题描述

使用select_points_object_model_3d将完整objectModel3D切分为水平层后,调用render_object_model_3d()渲染各层时,大点云的较小子片段会被自动居中、放大以适配图形窗口,无法保留其在完整点云中的原有尺寸与空间位置。
核心需求:所有渲染输出的点云片段,需和其在完整点云中的尺寸、位置完全一致,同一视角下渲染的各水平层图像可在x、y轴精准对齐。
当前临时方案为构建4个间隔分布的小方块边界对象,和待渲染片段共同传入渲染接口固定渲染范围,避免自动缩放,但该方法实现取巧、鲁棒性差;曾尝试传入位姿参数的方案,因点云经过多次变换后原始相机位姿失效,无法确定正确传入值,未达预期。

现有实现代码

分层渲染核心逻辑

for j := 0 to |ROI_slice_zFrom|-1 by 1
  select_points_object_model_3d (scene, 'point_coord_z', ROI_slice_zFrom[j], ROI_slice_zTo[j], slice)
  render_object_model_3d (rendered_image, [borderObjects, slice], CameraParam, [], colorParam, colorValues)
endfor

临时边界对象生成代码

*borderobjects
lenUnit                  := 3500
distLen                  := 1500

* borderobject poses
create_pose (distLen, 0, 0, 0, 0, 0, 'Rp+T', 'gba', 'point', pose0)
create_pose (0, distLen, 0, 0, 0, 0, 'Rp+T', 'gba', 'point', pose1)
create_pose (-distLen, 0, 0, 0, 0, 0, 'Rp+T', 'gba', 'point', pose2)
create_pose (0, -distLen, 0, 0, 0, 0, 'Rp+T', 'gba', 'point', pose3)
* offset
create_pose (-3000, -3000, 0, 0, 0, 0, 'Rp+T', 'gba', 'point', borderObjects_XYoffset)

* composed poses
pose_compose (pose0, borderObjects_XYoffset, pose0)
pose_compose (pose1, borderObjects_XYoffset, pose1)
pose_compose (pose2, borderObjects_XYoffset, pose2)
pose_compose (pose3, borderObjects_XYoffset, pose3)

* borderobject   
gen_object_model_3d_from_points (lenUnit, lenUnit, lenUnit, borderObject)

* borderobjects        
rigid_trans_object_model_3d (borderObject, pose0, borderObject_trans0)
rigid_trans_object_model_3d (borderObject, pose1, borderObject_trans1)
rigid_trans_object_model_3d (borderObject, pose2, borderObject_trans2)
rigid_trans_object_model_3d (borderObject, pose3, borderObject_trans3)
borderObjects := [borderObject_trans0, borderObject_trans1, borderObject_trans2, borderObject_trans3]
规范解决方案

不需要额外构造边界对象,直接通过render_object_model_3d的原生通用参数固定渲染视窗范围即可,实现逻辑如下:

  1. 渲染分层前先获取完整场景点云的空间包围盒
    * 输出顺序为[min_x, min_y, min_z, max_x, max_y, max_z]
    get_object_model_3d_params (scene, 'bounding_box1', BoundingBox)
    
  2. 提前定义固定渲染范围的通用参数,强制渲染器使用完整点云的xy范围作为投影边界,关闭自动适配缩放
    GenParamNames := ['disp_background', 'window_extent_min_x', 'window_extent_min_y', 'window_extent_max_x', 'window_extent_max_y']
    GenParamValues := ['false', BoundingBox[0], BoundingBox[1], BoundingBox[3], BoundingBox[4]]
    
  3. 所有切片渲染复用同一组固定视窗参数,无需附加边界对象
    for j := 0 to |ROI_slice_zFrom|-1 by 1
      select_points_object_model_3d (scene, 'point_coord_z', ROI_slice_zFrom[j], ROI_slice_zTo[j], slice)
      render_object_model_3d (rendered_image, slice, CameraParam, [], GenParamNames, GenParamValues)
    endfor
    

若点云经过刚体变换,只需在计算包围盒前将所有变换应用到原始scene对象上再读取包围盒即可,无需手动计算相机位姿,所有切片渲染投影范围完全统一,输出的各层图像x、y轴可完全对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:06:44