2012-10-09 254 views
0

我想做一個簡單的矢量旋轉。旋轉矢量

目標是領導我的第一人稱攝像機,它正在指向目標t方向d到新方向d1的新目標t1。

d和d1之間的過渡應該是一個平滑的運動。

隨着

public void FlyLookTo(Vector3 target) { 

     _flyTargetDirection = target - _cameraPosition; 
     _flyTargetDirection.Normalize(); 

     _rotation = new Matrix(); 

     _rotationAxis = Vector3.Cross(Direction, _flyTargetDirection); 

     // This bool tells the Update()-method to trigger the changeDirection() method. 
     _isLooking = true; 
    } 

我開始與它的新參數的方向變化和

// this method gets executed by the Update()-method if the isLooking flag is up. 
private void _changeDirection() { 

     dist = Vector3.Distance(Direction, _flyTargetDirection); 

     // check whether we have reached the desired direction 
     if (dist >= 0.00001f) { 

      _rotationAxis = Vector3.Cross(Direction, _flyTargetDirection); 
      _rotation = Matrix.CreateFromAxisAngle(_rotationAxis, MathHelper.ToRadians(_flyViewingSpeed - Math.ToRadians(rotationSpeed))); 


      // update the cameras direction. 
      Direction = Vector3.TransformNormal(Direction, _rotation); 
     } else { 

      _onDirectionReached(); 
      _isLooking = false; 
     } 
    } 

我執行實際的運動。

我的問題:實際運行工作正常,但移動速度減慢更多的電流方向越接近所期望的方向,如果連續執行數次,這使得它非常不愉快的運動。

如何使相機以相同的速度從方向d移動到方向d1?

+0

看到我的答案在這裏:http://gamedev.stackexchange.com/questions/38594/rotate-a-vector和在這裏:http://stackoverflow.com/questions/12797811/rotation-axis-to-perform-迴轉 –

回答

0

你的代碼看起來很穩固。 _flyViewingSpeed或rotationSpeed是否完全改變?

另一種方法是使用Vector3.Lerp(),它將完成你想要做的事情。但是請注意,您需要使用初始開始和目標方向 - 而不是當前方向 - 否則您將獲得不同的速度變化。

此外,而不是使用距離(通常用於點),我會使用Vector3.Dot()這是有點像距離的方向。它也應該比Distance()更快。

希望這有助於。