![腾讯游戏开发精粹](https://wfqqreader-1252317822.image.myqcloud.com/cover/110/26262110/b_26262110.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.3 路径的构建
路径为路点间曲线的拼接,共路点的两段曲线在邻接处可以共享相同的切线以保证C1连续,也可以设置成非共享切线,用来拼接切换了方向的直线路径等。路径系统只负责拼接和提供路点的信息,并没有限制曲线的类型,所以路径系统本身是支持多种类型曲线的拼接的。
路径上的每个路点都可以设置自己的方向(切线),虽然灵活,但每一个都要手工指定,也会比较烦琐,所以在切线的设置上模仿了Catmull-Rom这类Cardinal曲线的做法,即路点i处的切线由路点i-1和路点i+1的位置和
决定:
![](https://epubservercos.yuewen.com/EFD27D/14693592205506206/epubprivate/OEBPS/Images/figure_0055_0004.jpg?sign=1739307755-gxq99FVwN4oCRIRPTHeKMx3P7MdanSkR-0-b2cd3b7c45399d85da4546051a8971f2)
τ为切线的缩放因子(张弛因子),如图3.2所示,这样在大部分情况下,只需要指定路径两个端点路点的切线,中间的路点只需要调整端点位置来影响路点的切线方向,调整缩放因子来影响曲线的弯曲程度。
![](https://epubservercos.yuewen.com/EFD27D/14693592205506206/epubprivate/OEBPS/Images/figure_0055_0005.jpg?sign=1739307755-wJ2VSUdckBaPfX3Nt44qzRlppUbb5JsP-0-7859f30a555d0759862b38176631b180)
图3.2 Cardinal曲线切线的设置
在实现上,路径上的路点在使用邻接路点的信息构建曲线时,总是将邻接路点转换到自己的局部坐标系下,即在由路点Pi Pi+1构建的曲线中,Pi处于坐标点(0,0,0)且旋转为(0,0,0)。所以,在使用路径时,每一段曲线的计算结果还要做一次局部坐标系到世界坐标系的转换。这样处理的好处是路径作为一个整体不受刚体变换的影响,特别适合游戏中场景动态拼接的需求。