dingshuaiyu 发表于 2017-3-23 14:13:43

osg 导航网格绘制方法 -基于osg的寻路

本帖最后由 dingshuaiyu 于 2017-3-23 16:24 编辑

本人这段时间,使用osg写了一个寻路功能,寻路算法基于a*然后进行的在osg中的适配
目前功能已经实现,但是需要进行优化
1. 现在使用的寻路是基于网格版,然后8方向扩展进行寻路,但是使用网格版有很多弊端,osg有什么方法能生成导航网格,已知其他引擎比如UE,U3D,OGRE,都可以直接绘制地图网格,类似这种
ogre版

u3d版


那osg有什么方法呢,我查了以后找到一个查看模型网格的方式
m_viewer->addEventHandler(new osgGA::StateSetManipulator(m_viewer->getCamera()->getOrCreateStateSet()));
怎么具体按照地图和障碍位置生成可用的地图网格呢
想要的效果类似这种


2.还有一个问题是如果对已经获取到的寻路点进行优化,我目前的做法是,假设路径点有ABCDE5个点 用A和点B进行连线做线段碰撞与整个场景求交,如果没有交点则用A和C求交,如果产生碰撞,则从B点开始继续后后续点进行求交,直到循环完所有点,效果图如下

但是依然后弊端
首先是线段没有宽度,优化后的路径线回造成人物半个身子穿过障碍的情况
其次是最大的问题,如果场景中没有障碍,但是依然需要绕路走的时候,优化路径就会是路径变得不好,如下图
红色画线区域为不可行区域,虽然寻路已经避开不可行区域,但是优化以后由于没有碰撞,所以还是会走粉红色路径线,目前只能周围加透明墙进行规避,有没有什么更好的路径优化算法

3.osg除了线段碰撞,和四面体碰撞,还有什么其他的精准的碰撞检测机制么,现在我用到的模型碰撞只是这两种,查文档也没发现有什么其他的碰撞方式,必须引用第三方物理碰撞么,

当然还是有很多其他的问题,比如导航网格画好以后如何用A*进行寻路,移动过程中怎么躲避突然出现的障碍物,有的有思路,有的还没有思路,希望有做过类似功能,或者知道某些方法的朋友们支援一下,感激不尽。

dingshuaiyu 发表于 2017-3-28 08:48:35

目前正在阅读recastnavigation源码, 功能很强大,代码也开源,地图导航网格,寻路,动态躲避等等全部实现,就是逻辑和算法方面有很大的障碍,正在学习中,而且想办法在osg中实现,如果有感兴趣的伙伴可以一起学习
最后,感谢osgQQ群中 阿威.耳机威 指导

pcsms_g5yqnj4g 发表于 2020-9-22 08:41:06

你好,楼主能分享A*算法寻路过程吗
页: [1]
查看完整版本: osg 导航网格绘制方法 -基于osg的寻路