NavMesh,关于导航网格的创建

本文介绍了3D游戏中的NavMesh导航网格创建过程,包括从OBJ文件导入模型,创建导航节点,判断法线进行筛选,合并相邻节点以确保凸体,以及鼠标拾取和连接生成。此外,还探讨了处理物体加入后如何分裂和合并节点,以及A*寻路算法在不同连接类型下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在《人工智能游戏编程真言》中,有详细的叙述如何建立导航网格,但是却没有一丁点的代码,而且在创建过程中,还有许多细节问题没有解决,在百度文库中有一篇关于AS3建立导航网格的文章,里面也讲的很好,但是那里使用三角形作为节点,这显然对于多边形较多的3D世界不太合适。不过里面的A*寻路算法的相关取值是值得观看的。进行了几个礼拜的编写,导航网格稍微能看我先给几张截图,让大家有个底!可以生成多边形的网格节点,而且可以自动生成相邻连接,支持鼠标直接点选节点并且显示(渲染)其和其有连接的节点,以及加入物体后分裂受影响的节点,以及裁去小面积节点,但是没有3-2合并,在后面会完善。我经过三张地图的测试,感觉还不错

这张图是原网格模型,这里用的是OBJ文件格式模型,可以用3DMAX直接导出,obj文件加载器要自己些,推荐书籍有《DirectX+游戏开发终极指南》,《focus on 3d model》,场景自己用3DMAX制作,这里的场景比较粗陋,但是可以用来测试。

最初直接把全部三角形当作节点加入NavMesh中,这里面就是画出的节点,注意这里不是用线框模式渲染出来的,而是渲染的NavMesh,整个NavMesh包含一个导航节点链表(每个节点包括一个顶点索引数组,指向后面顶点数组的位置,就是这个节点所有顶点的索引集合。还有一个法线索引,主要是为了减小存储空间,就像《真言》里说的),顶点数组(包含顶点位置,还有指向的导航节点的指针的链表,这里可以知道哪些节点包含了此顶点,这个在合并的时候很有用哦,而且真言里也讲了极大的缩小合并时间),法线数组(法线值,因为游戏中,能走的面片法线很多相同的,基本都是指向Y轴)。现在是把你的OBJ模型里面可走(表示面法线值不会很离谱)的三角形,用你的OBJ加载器把纯三角形(只包含位置,DX中要使顶点序为顺时针)一个一个的加到NavMesh中,在加之前判断法线是否过陡或向下的那种,假如法线测试通过,那么在法线数组中查找是否有相近的法线值,并设置法线索引,假如没有那么在法线数组中假如当前法线,并且设置当前节点的法线索引。然后在设置节点的顶点索引

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值