Vector3.Slerp的使用

1.Vector3.Slerp是指球形插值。官網用法如下
  1. //在日出和日落之間動畫弧線  
  2. usingUnityEngine;  
  3. usingSystem.Collections;  
  4.    
  5. publicclass example : MonoBehaviour   
  6. {  
  7.         publicTransform sunrise;  
  8.         publicTransform sunset;  
  9.         voidUpdate()   
  10.         {  
  11.                 //弧線的中心  
  12.                 Vector3 center = sunrise.position + sunset.position *                 0.5f;  
  13.                 //向下移動中心,垂直於弧線  
  14.                 center -= newVector3(0, 1, 0);  
  15.                 //相對於中心在弧線上插值  
  16.                 Vector3 riseRelCenter = sunrise.position - center;  
  17.                 Vector3 setRelCenter = sunset.position - center;  
  18.                 transform.position = Vector3.Slerp(riseRelCenter,  
  19.                                       setRelCenter, Time.time);  
  20.                 transform.position += center;  
  21.         }  


對於此例子進行解析,插值的時候需要設定圓心。可按照上面的固定模式來,而圓心的位置可以根據自己的情況去修改 12-14行代碼。
2.另外需要注意的是最後一步位置值又加了一次圓心座標。這裏是爲了將插值偏移到空間中圓心的周圍。
如果沒有這一步,會因爲riseRelCenter,setRelCenter只表示方向,而將插值算到原點周圍。
所以最後一步要注意。
3.通過測試
帶循環時
for(int j = 0; j < 10; j++)
{
Vector3 center = (pos1 + pos2) * 0.5f;
center -= new Vector3(0, 0.5f, 0);
Vector3 vecA = pos1 - center;
Vector3 vecB = pos2 - center;
Vector3 drawVec = Vector3.Slerp(vecA, vecB, 0.1f * j);
if(j == 4)
print(drawVec.ToString("0.0000"));
}

還有不帶循環時
Vector3 center = (pos1 + pos2) * 0.5f;
center -= new Vector3(0, 0.5f, 0);
Vector3 vecA = pos1 - center;
Vector3 vecB = pos2 - center;
Vector3 drawVec = Vector3.Slerp(vecA, vecB, 0.1f * 4);
print(drawVec.ToString("0.0000"));

結果在0.4 的時候是一致的。即我們可以根據情況直接選取某些單獨的值,這裏跟mathf.Lerp有些區別。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章