【问题标题】:Bullet physics: How to get relative points on collision shape子弹物理:如何获得碰撞形状的相对点
【发布时间】:2015-07-27 20:48:39
【问题描述】:

为了获得碰撞形状(复合形状)上的相对点,我尝试了从内到外的 raytest,但从未从内部工作过。它 只在外面工作。

这是我的设置和代码:

  • C++ 开放框架bullet physics addson
  • 视觉工作室 2012
  • 制作了一个名为“shape”的刚体
  • 制作了一个名为“world”的 btDiscreteDynamicsWorld

这是一个光线测试代码示例:

btVector3 ray_from = shape->getCenterOfMassPosition() ; //  center of mass of the shape called stones[0]
btVector3 ray_to = ray_from + btVector3(0, -100., 0); // ray to the top

btCollisionWorld::AllHitsRayResultCallback allResults(ray_from, ray_to);
world->rayTest(ray_from, ray_to, allResults);

for (int i = 0; i < allResults.m_hitFractions.size(); i++)
 {
   btVector3 p = ray_from.lerp(ray_to, allResults.m_hitFractions[i]);
   ray_all_results.push_back(new btVector3(p.getX(), p.getY(), p.getZ()));
 }

【问题讨论】:

    标签: c++ physics openframeworks bullet


    【解决方案1】:

    很多人都遇到过这个问题,并且似乎在当前版本中执行错误。当我尝试在形状表面上获取位置时,我遇到了同样的问题。

    所以不用担心,这不是您设置的问题,它是 Bullet Physics 库。

    似乎也是

    rayCallback.m_flags &= !btTriangleRaycastCallback::kF_FilterBackfaces;
    

    从未在代码中检查过。

    所以我的建议是你只需反转你的光线并从外部测试表面。该错误可能会在未来的某个时候得到修复。

    http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?f=9&t=10722&p=35992&hilit=ray#p35992

    https://github.com/bulletphysics/bullet3/issues/459

    【讨论】:

    • rayCallback.m_flags &amp;= !btTriangleRaycastCallback::kF_FilterBackfaces; 没有做你期望它做的事情(删除标志)!你的意思是:rayCallback.m_flags &amp;= ~btTriangleRaycastCallback::kF_FilterBackfaces;
    • 哦,对了。但这并没有改变标志的设置在代码中不再检查的事实。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 2016-05-14
    • 2018-01-28
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多