• 相机平行状态下模型无法初始化到桌面


    最近遇到了一个很奇怪的bug,明明桌面坐标的初始原点,都设置ok了,但是模型还是有在空中漂浮的感觉,如下图所示。

    在这里插入图片描述


    问题分析

    • 将上图中的模型手动移动位置,可以将其移动到桌面上,同时看起来是放在桌面上。这说明模型的轴和桌面的法线是一致的,也就是说R是对的,只是T不对。
    • 最开始我以为是 mean.x,mean.y,mean.z 作为桌面坐标的原点有问题,因为这个值是个平均值,造成了初始T有误。
    • 后来我手动的选取深度图中桌面上的某一点,计算它相对于深度相机坐标系的位置,用这个位置作为初始T,也会出现上图的问题,这就让人摸不着头脑了。

    bug排查

    就不讲我的思考过程了,直接说造成这个问题的结论。

    首先,每个模型都有自己的bounding box,如下所示

    Eigen::Vector3f minRender_1 = { 0.156,0.184,0.190 }, maxRender_1 = { 0.804,1.081,0.810 };
    Eigen::Vector3f minRender_2 = { -0.145,0.190,-0.097 }, maxRender_2 = { 1.249,1.145,0.955 };
    Eigen::Vector3f minRender_3 = { -0.240,-0.001,0.094 }, maxRender_3 = { 1.064,0.913,0.922 };
    
    • 1
    • 2
    • 3

    比如说minRender_1中的第二个参数0.184,说明这个物体的包围盒是从Nerf世界的0.184开始渲染,那Nerf模型放进Nerf世界后,它的初始Y轴位置就是0.184,如果我的虚拟相机的T[1](代表虚拟相机在虚拟世界的位置)是0.2的话,那物体看起来可不是像在空中飘着嘛。
    同时还有一个可能,物体它自身与box的x_z平面之间,虽然是平行的,但是这部分有空隙,那也会造成物体在空中
    最后还有可能,物体的某一部分是透明的,所以也会看起来物体飘着空中。


    解决方案

    对于某个物体的相机视角而言,让它的相机T[1]+minRender_1[1],这样物体的底部Box就是平的了,然后在给每个相机T[1]+1,这里的1是个常量,属于经验值。这样一来物体就比较像是在桌面上放着了。

  • 相关阅读:
    typescript之神奇的infer - 推断任何你想知道的类型
    通过java爬取动态网页
    Linux安装免费Https证书,过期自动更新 省钱秘籍
    STM32F103ZET6【HAL开发】STM32CUBEMX------3.3测量PWM的频率和占空比
    两种方法实现pycharm中代码回滚到指定版本(附带截图展示)
    比特币有助减少腐败;微软 Copilot 每月赔 20 美元;AIGC 明年会“洗冷水澡”丨 RTE 开发者日报 Vol.64
    力扣561. 数组拆分
    物联网协议MQTT
    2.6 upstream指令参数说明
    docker-compose
  • 原文地址:https://blog.csdn.net/weixin_40824135/article/details/126410955