首页 / C# / c# – Bullet中的凹面碰撞检测
c# – Bullet中的凹面碰撞检测
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – Bullet中的凹面碰撞检测,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2256字,纯文字阅读大概需要4分钟。
内容图文
![c# – Bullet中的凹面碰撞检测](/upload/InfoBanner/zyjiaocheng/795/892109037aa14ab2a9e4473b9bcdb62d.jpg)
我是一名子弹新秀,所以如果我的问题听起来微不足道,我会提前道歉.
我需要从.stl文件加载一组凹三角网格并执行碰撞检测.用户可以移动对象.从用户手册中,我读到:
“承认三角网格:
对于静态世界环境,表示静态三角形网格的一种非常有效的方法是使用btBvhTriangleMeshShape.“
因此,我的问题是:
– Bullet能否检测使用BvhTriangleMeshShape建模的凹网格对象之间的碰撞?
– contactTest和CollisionWorld :: PerformDiscreteCollisionDetection()之间的真正区别是什么?
– 我是否需要为凹面碰撞检测指定不同的碰撞算法?
我正在使用BulletSharp维护的C#包装器.我做了什么,设置了我的子弹环境:
CollisionConfiguration bt_collision_configuration;
CollisionDispatcher bt_dispatcher;
BroadphaseInterface bt_broadphase;
CollisionWorld bt_collision_world;
double scene_size = 500;
uint max_objects = 16000;
bt_collision_configuration = new DefaultCollisionConfiguration();
bt_dispatcher = new CollisionDispatcher(bt_collision_configuration);
float sscene_size = (float)scene_size;
Vector3 worldAabbMin = new Vector3(-sscene_size, -sscene_size, -sscene_size);
Vector3 worldAabbMax = new Vector3(sscene_size, sscene_size, sscene_size);
bt_broadphase = new AxisSweep3_32Bit(worldAabbMin, worldAabbMax, max_objects);
bt_collision_world = new CollisionWorld(bt_dispatcher, bt_broadphase, bt_collision_configuration); [/code]
并将我的CollisionObjects加载为BvhTriangleMeshShape.
为了检测碰撞,我使用了:
contactTest(object, callback)
此代码的结果是每次两个边界框截取时调用ContactResultCallback :: NeedsCollision函数,但如果2个网格相交则不会找到流形.
其次:
bt_collision_world.PerformDiscreteCollisionDetection();
int numManifolds = bt_collision_world.Dispatcher.NumManifolds;
使用此二级代码,根本找不到流形.
解决方法:
正如您已经在手册中读到的那样,btBvhTriangleMeshShape只能用于静态对象.这意味着这种类型的两个对象没有碰撞算法(因为如果它们都是静态的,它们就不会发生碰撞).在尝试时,您可以测试它们的边界框的交集,但是不会创建任何碰撞流形.
如果你想知道btBvhTriangleMeshShape的用途是什么,它用于检测凸动态物体和静态凹面环境之间的精确碰撞.
Bullet建议的官方解决方案是对用于移动物体的每个凹模型执行凸分解.凸分解的优选方法是HACD(分层近似凸分解).可以在Bullet示例中找到一个示例.
另一个值得尝试的算法是V-HACD(体积分层近似凸分解),它产生的拓扑结构比前一个更好,但凸包的精度较低 – 结果碰撞形状比原始网格大.错误率可以通过分辨率控制,但会减慢过程.
内容总结
以上是互联网集市为您收集整理的c# – Bullet中的凹面碰撞检测全部内容,希望文章能够帮你解决c# – Bullet中的凹面碰撞检测所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。