查看: 1748|回复: 2

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

[复制链接]

该用户从未签到

发表于 2017-3-23 14:13:43 | 显示全部楼层 |阅读模式
本帖最后由 dingshuaiyu 于 2017-3-23 16:24 编辑

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

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

2.还有一个问题是如果对已经获取到的寻路点进行优化,我目前的做法是,假设路径点有ABCDE5个点 用A和点B进行连线做线段碰撞与整个场景求交,如果没有交点则用A和C求交,如果产生碰撞,则从B点开始继续后后续点进行求交,直到循环完所有点,效果图如下
ZFMVQYBIDPP0XB~]S6J1.png 53$PVL7~Q{T{_S1`Y4RSG$N.png
但是依然后弊端
首先是线段没有宽度,优化后的路径线回造成人物半个身子穿过障碍的情况
其次是最大的问题,如果场景中没有障碍,但是依然需要绕路走的时候,优化路径就会是路径变得不好,如下图
$[KIBIE36G005)]NRDEGG5Y.png 红色画线区域为不可行区域,虽然寻路已经避开不可行区域,但是优化以后由于没有碰撞,所以还是会走粉红色路径线,目前只能周围加透明墙进行规避,有没有什么更好的路径优化算法

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

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

该用户从未签到

 楼主| 发表于 2017-3-28 08:48:35 | 显示全部楼层
目前正在阅读recastnavigation源码, 功能很强大,代码也开源,地图导航网格,寻路,动态躲避等等全部实现,就是逻辑和算法方面有很大的障碍,正在学习中,而且想办法在osg中实现,如果有感兴趣的伙伴可以一起学习
最后,感谢osgQQ群中 阿威.耳机威 指导
  • TA的每日心情
    开心
    2020-10-10 15:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2020-9-22 08:41:06 | 显示全部楼层
    你好,楼主能分享A*算法寻路过程吗
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    OSG中国官方论坛-有您OSG在中国才更好

    网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

    联系我们

    • 工作时间:09:00--18:00
    • 反馈邮箱:1315785073@qq.com
    快速回复 返回顶部 返回列表