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)。所以,在使用路徑時,每一段曲線的計算結果還要做一次局部坐標系到世界坐標系的轉換。這樣處理的好處是路徑作為一個整體不受剛體變換的影響,特別適合游戲中場景動態拼接的需求。