腾讯游戏开发精粹
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.3 路径的构建

路径为路点间曲线的拼接,共路点的两段曲线在邻接处可以共享相同的切线以保证C1连续,也可以设置成非共享切线,用来拼接切换了方向的直线路径等。路径系统只负责拼接和提供路点的信息,并没有限制曲线的类型,所以路径系统本身是支持多种类型曲线的拼接的。

路径上的每个路点都可以设置自己的方向(切线),虽然灵活,但每一个都要手工指定,也会比较烦琐,所以在切线的设置上模仿了Catmull-Rom这类Cardinal曲线的做法,即路点i处的切线由路点i-1和路点i+1的位置决定:

τ为切线的缩放因子(张弛因子),如图3.2所示,这样在大部分情况下,只需要指定路径两个端点路点的切线,中间的路点只需要调整端点位置来影响路点的切线方向,调整缩放因子来影响曲线的弯曲程度。

图3.2 Cardinal曲线切线的设置

在实现上,路径上的路点在使用邻接路点的信息构建曲线时,总是将邻接路点转换到自己的局部坐标系下,即在由路点Pi Pi+1构建的曲线中,Pi处于坐标点(0,0,0)且旋转为(0,0,0)。所以,在使用路径时,每一段曲线的计算结果还要做一次局部坐标系到世界坐标系的转换。这样处理的好处是路径作为一个整体不受刚体变换的影响,特别适合游戏中场景动态拼接的需求。