慢慢移动一个初始角度,直到达到最终角度

时间:2016-05-20 00:42:27

标签: math vector 3d game-physics angle

我将尝试对此进行描述。我正在编辑游戏,场景是3D区域。

我有一个初始角度,写为方向向量,另一个向量具有不同的坐标。我们知道,2个向量之间的角度由下式给出: Theta = ACos(DotProduct(vec1,vec2)/(VectorLength(vec1)* VectorLength(vec2)))

所以让我们来描述一下这个场景:我正在编程某种固定武器,一把哨兵枪,这个东西慢慢移动他的“头部”,向敌人射击子弹。角度旋转是我的问题。

让我们想象一下:我把我的哨兵枪放在一个空的3D区域,一个“敌人”在那里产生。我现在可以得到我的哨兵视角的方向向量,以及我的哨兵和玩家之间的方向向量。让我们猜测,使用所描述的公式,他的分离角度是45度。我的哨兵枪每隔0.1秒就会认为(调用一个函数),我想在每个思维函数上移动他的头 5度,直到它到达玩家(即两个向量几乎相等),这意味着它将在0.9秒内(45度后5度)到达玩家(如果玩家保持其位置......)

如何慢慢移动哨兵的视角直到达到目标?在2D中很容易但我知道我正在与3D场景作斗争,而我现在已经迷失了。

任何帮助将不胜感激,关于编码,我将感激伪代码。谢谢! (对不起我的英语)

1 个答案:

答案 0 :(得分:1)

您需要的是SLERP - 球面线性插值

你的起始方向向量是p0,目标方向是p1,Omega是你的Theta,t参数在0..1范围内变化,需要步骤

2D案例的Delphi示例(易于控制)

var test = React.createClass({
  componentDidUpdate: function(prevProp, prevState){
    this.refs.test.innerHTML = "Hello";
  },
  render: function(){
    return (
      <div contentEditable='true' ref='test'></div>
    );
  }
});

enter image description here