彈性跟隨相機!3D入門教程!

默默地在背後關注她!

前言

在3d遊戲中經常會用到鏡頭跟隨效果,這次我們就來實現它!

閱讀本文需要一些的基本知識:

  • 向量基本運算(加法/減法/乘積)
  • 會調用四元數API接口
  • 運動學(速度/加速度/位移)

效果預覽如下(可調遠近上下/彈性跟隨):
效果預覽

實現

相機跟隨的原理就像是,你暗中跟隨觀察(尾隨)你心儀的對象(Object)。

既然是觀察,就要與對象保持一定的距離

爲了不被對象發現,我們觀察的位置和對象的朝向有關。

當然,你要看到對象,你的眼睛方向一定得看着對象吧,這就是視口方向

原理圖

針對我們要達到的效果,需要定義好以下幾個變量。

  • 觀察對象的朝向(上方向,前方向)
  • 攝像機與對象的距離(水平距離,垂直距離)

最終我們需要算出以下幾個玩意兒:

  • 相機位置
  • 相機旋轉角度

位置

求相機的位置分兩步:

  1. 根據對象的前方向和相機的水平距離,求出中間點座標
  2. 根據對象的上方向和相機的垂直距離,求出相機的位置

計算位置

中文式僞代碼如下:

對象到中間點的向量 = -1 * 對象前方向 * 相機的水平距離
中間的座標 = 對象到中間點的向量 + 對象點座標
中間點到相機的向量 = 對象上方向 * 相機的垂直距離
相機座標 = 中間點座標 + 中間點到相機的向量

角度

旋轉角度可以通過視口朝向和上方向得出。

旋轉角度的求法

僞代碼如下:

前向向量 = 對象座標 - 相機座標
旋轉角度 = 旋轉API(前向向量的歸一化, 對象上向量)

需要注意的是,在 Cocos Creator 中相機朝向和節點旋轉的角度是相反的,所以前向量的方向要取反向。

攝像機節點

彈簧

我們還可以給相機添加一個彈性跟隨的效果。

計算過程如下:

  • 先根據上面的方法計算出相機的理想位置。
  • 然後假設現在相機所在的位置和理想的位置中有個彈簧。
  • 再根據彈簧模型求出合力(加速度)
  • 最後模擬運動算出時間點位置(位置+速度)

彈簧模型

彈簧簡易模型受兩個因素影響:

  • 彈簧長度(即相對位置)--拉力
  • 當前速度 --阻力

爲此我們可以定義想要的彈力系數阻力系數

結合起來的計算位置的僞代碼如下:

理想位置 = 計算理想位置()
相對距離的向量 = 理想位置 - 當前位置
加速度 = - 相對距離*彈力系數 - 當前速度*阻力系數
當前速度 = 當前速度 + 加速度*間隔時間
當前位置 = 當前位置 + 當前速度

擴展

還可以用其他的方法去更新位置:

積分法

關於彈簧係數的關係參考:

彈簧模型係數

小結

位置!距離!旋轉!彈簧!

以上爲白玉無冰使用 Cocos Creator 3.0 preview-1 實現 "彈性跟隨相機!" 的技術分享。歡迎三連(點贊/在看/留言/分享)支持!

FFF = 專注(focus)、反饋(feedback)以及糾正(fix it)!

參考資料

《遊戲編程算法與技巧》
《大學物理》
原文鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章