我将尝试对此进行描述。我正在编辑游戏,场景是3D区域。
我有一个初始角度,写为方向向量,另一个向量具有不同的坐标。我们知道,2个向量之间的角度由下式给出: Theta = ACos(DotProduct(vec1,vec2)/(VectorLength(vec1)* VectorLength(vec2)))
所以让我们来描述一下这个场景:我正在编程某种固定武器,一把哨兵枪,这个东西慢慢移动他的“头部”,向敌人射击子弹。角度旋转是我的问题。
让我们想象一下:我把我的哨兵枪放在一个空的3D区域,一个“敌人”在那里产生。我现在可以得到我的哨兵视角的方向向量,以及我的哨兵和玩家之间的方向向量。让我们猜测,使用所描述的公式,他的分离角度是45度。我的哨兵枪每隔0.1秒就会认为(调用一个函数),我想在每个思维函数上移动他的头 5度,直到它到达玩家(即两个向量几乎相等),这意味着它将在0.9秒内(45度后5度)到达玩家(如果玩家保持其位置......)
如何慢慢移动哨兵的视角直到达到目标?在2D中很容易但我知道我正在与3D场景作斗争,而我现在已经迷失了。
任何帮助将不胜感激,关于编码,我将感激伪代码。谢谢! (对不起我的英语)
答案 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>
);
}
});