VTK 碰撞检测

需求:机械手运动仿真,实时检测是否与周边物体发生碰撞

实现:

1,VTK的碰撞检测原理就是 求物体的包围盒,然后检测包围盒与线、面、或者另一个包围盒是否相交。包围盒主要包括球体、轴对齐包围盒(AABB)有向包围盒(OBB)和凸包(Convex Hull),参考(VTK笔记——轴对齐包围盒(AABB) - 灰信网(软件开发博客聚合)

2,VTK自带了一个vtkCollisionDetectionFilter过滤器,来计算碰撞检测,此过滤器利用的就是OBB包围盒,使用简单,只需提供两个物体的数据集和矩阵即可。

3,实现的时候 利用一个结构体,来定义角色,矩阵和包围盒。这样便于计算。

struct  SimulateActor
{
    using Ptr =  QSharedPointer<SimulateActor>;
    vtkSmartPointer<vtkActor> Actor;
    vtkSmartPointer<vtkTransform> Trans;
    vtkSmartPointer<vtkPolyData> PolyData;
    vtkSmartPointer<vtkCollisionDetectionFilter> Collide;
};

4,首先初始化之后所有的物体。然后利用两个循环来依次判断每两个物体是否发生碰撞。

5,不足:

(1),此过滤器只能检测两个物体是否发生碰撞,无奈当前只能通过两个循环来进行遍历。

(2),没有找到如何将多个actor组合成一个,然后进行碰撞检测的方法,如果能组合成一个效率会提高很多。

(3)目前六个部件,与50个障碍物进行碰撞检测。检测一次的时间大约50ms。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

土拨鼠不是老鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值