如果这三个三角面分别属于不同的坡面(比如一个是地面,一个是斜坡,一个是台阶),它们的法线差异较大,则不会合并,导航网格会分别在每个面上生成独立的导航多边形。其中独立的多边形是通过投影得到的平面吗

简要回答:

不是通过投影到某个平面得到的,而是直接以原三角面的实际空间位置作为导航多边形。

下面详细解释:


1. 非共面三角面生成导航多边形的方式

  • 当多个三角面法线差异较大(比如地面、斜坡、台阶),它们不会被合并为一个多边形。
  • 每个三角面会单独生成一个导航多边形,这个多边形的顶点就是三角面的三个顶点,直接位于原始三维空间中,不做投影。

2. 为什么不投影到某个平面?

  • 导航网格的本质是让AI在三维空间的可行走表面上移动。
  • 如果把三角面投影到某个平面(比如水平面),会丢失真实的空间信息,AI的移动会出现“穿模”或“悬空”。
  • 导航多边形必须准确地贴合原始地形表面,这样AI才能正确地“踩”在地形上。

3. 导航多边形的空间属性

  • 每个导航多边形(无论是三角形还是合并后的凸多边形)都保留在三维空间中的实际位置和朝向
  • AI在寻路时,路径点会被投影到这些多边形的表面上,保证“脚下有地”。

4. 例子说明

  • 假设有一个台阶模型,由地面三角面、斜坡三角面、台阶面三角面组成。
  • 这三个三角面法线差异大,不会合并。
  • 导航网格会在每个三角面上各自生成一个三角形导航多边形,它们分别位于地面、斜坡、台阶的实际空间位置。
  • AI在跨越这些面时,会根据多边形之间的连接关系(如边相邻、高差允许)进行寻路。

5. 总结

  • 独立的导航多边形不是通过投影得到的平面,而是直接采用原三角面的空间位置。
  • 这样可以保证AI在复杂地形上行走时,始终贴合真实地形表面。

我们继续深入讲解导航多边形之间的连接关系,以及AI如何在这些不共面的多边形之间平滑移动


1. 导航多边形之间的连接关系

1.1 邻接关系的建立

  • 边邻接:如果两个导航多边形(比如两个三角面)有一条完全重合的边(或在容差范围内),它们就被认为是“邻接”的。
  • 连接信息:在导航网格的数据结构中,每个多边形会记录与自己相邻的多边形的索引或引用。
  • 高差与步高判定:即使边重合,如果两个多边形之间的高度差超过AI的最大步高(step height),也不会建立连接。

1.2 多层/立体结构的连接

  • 多层连接:比如楼梯、台阶、桥梁等,导航网格会在不同高度的多边形之间建立“跳跃连接”或“特殊连接”。
  • Off-mesh Link:在Unity、Unreal等引擎中,常用“off-mesh link”来表示如跳跃、攀爬、传送等特殊移动方式的连接。

2. AI在不共面多边形之间的移动

2.1 路径点的生成

  • 路径点序列:寻路算法(如A*)会在多边形之间找到一条多边形序列(poly path)。
  • 每个路径点:通常是多边形的中心点、边中点,或根据实际需要插值生成。

2.2 路径平滑(Path Smoothing)

  • 直线化:初步路径往往是“折线”,AI会尝试在不碰撞障碍的前提下,尽量走直线(如Funnel算法/Channel算法)。
  • 投影到表面:AI的实际移动点会被投影到当前多边形的表面上,保证“脚下有地”。
  • 高度插值:在两个不共面多边形之间移动时,AI的高度会根据多边形表面插值平滑过渡,避免突然跳跃。

2.3 过渡处理

  • 步高处理:如果两个多边形之间有高度差,但在AI可跨越的步高范围内,AI会“上台阶”或“下台阶”。
  • 坡面处理:在斜坡上,AI的移动轨迹会自动贴合斜坡表面。

3. 具体例子

假设AI要从地面(平面A)走到台阶(平面B):

  1. 导航网格在地面和台阶分别有独立的多边形。
  2. 这两个多边形有一条边重合,且高度差在AI可跨越范围内,于是建立连接。
  3. AI寻路时,路径会经过这两个多边形。
  4. AI的移动点会先在地面多边形上,接近边界时,平滑过渡到台阶多边形上,Y坐标(高度)会插值变化,表现为“上台阶”动作。

4. 相关算法

  • Funnel Algorithm(漏斗算法):用于在多边形通道中生成最短、最平滑的路径。
  • NavMesh Projection:将AI的目标点、移动点实时投影到当前多边形表面,保证贴地移动。

5. 总结

  • 导航多边形之间通过边邻接和高差判定建立连接。
  • AI在这些多边形之间移动时,路径点会被平滑地投影到各自的表面,实现自然的上下坡、上台阶等动作。
  • 现代引擎和导航库都内置了这些处理机制,开发者只需设置好参数即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你一身傲骨怎能输

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值