LibGDX Vector3 Lerp 问题
LibGDX Vector3 Lerp issue
我正在使用 LibGDX 并尝试在两个 Vector3 之间进行 lerp...但是,当我这样做时,它不是线性的,而是以指数方式缓和它。我不要这个,我要纯线性的!
这样我的模型就可以跟随一组 Vector3,就像跟随路径一样。
我的更新方法的代码片段在这里:
public void update(float delta) {
if (!this.pathQueue.isEmpty() && this.currentDestination == null) {
this.currentDestination = this.pathQueue.poll();
this.alpha = 0;
}
Vector3 position = new Vector3();
position = this.model.transform.getTranslation(position);
if (this.currentDestination != null) {
this.alpha += this.speed * delta;
if (this.alpha >= 1) {
this.currentDestination = this.pathQueue.poll();
this.alpha = 0;
}
System.out.println(alpha);
//position.interpolate(this.currentDestination.getPosition(), this.alpha, Interpolation.linear);
position.lerp(this.currentDestination.getPosition(), this.alpha);
//I have tried interpolate and lerp, same effect.
this.model.transform.setTranslation(position.x, 0, position.z);
}
}
谢谢!
编辑:
我已经将我的代码更改为一个更简单的问题,并使用固定的新 Vector3(5,0,5) 向量:
public void update(float delta) {
if (!this.pathQueue.isEmpty() && this.currentDestination == null) {
this.currentDestination = this.pathQueue.poll();
this.alpha = 0;
}
if (this.currentDestination != null) {
this.alpha += this.speed * delta;
this.currentPosition.lerp(new Vector3(5,0,5), this.alpha);
this.model.transform.setTranslation(this.currentPosition.x, 0, this.currentPosition.z);
}
}
它仍然会导致问题。同样的事情发生了!我很困惑。
我认为你的问题是这样的:
position.lerp(this.currentDestination.getPosition(), this.alpha);
您正在从位置更新到目的地,在每一帧更新位置之后,因此在下一帧上,您实际上是从新位置到结尾进行插值。 (因此,当您离目的地越近时,要插入的位置之间的差异就越小。)
我认为您 alpha
的更新是正确的,因此您希望在每一帧上从起点到终点进行插值。所以,我认为在开始和结束之间插值之前将 "position" 向量重置为开始应该会给你想要的行为。
我正在使用 LibGDX 并尝试在两个 Vector3 之间进行 lerp...但是,当我这样做时,它不是线性的,而是以指数方式缓和它。我不要这个,我要纯线性的!
这样我的模型就可以跟随一组 Vector3,就像跟随路径一样。
我的更新方法的代码片段在这里:
public void update(float delta) {
if (!this.pathQueue.isEmpty() && this.currentDestination == null) {
this.currentDestination = this.pathQueue.poll();
this.alpha = 0;
}
Vector3 position = new Vector3();
position = this.model.transform.getTranslation(position);
if (this.currentDestination != null) {
this.alpha += this.speed * delta;
if (this.alpha >= 1) {
this.currentDestination = this.pathQueue.poll();
this.alpha = 0;
}
System.out.println(alpha);
//position.interpolate(this.currentDestination.getPosition(), this.alpha, Interpolation.linear);
position.lerp(this.currentDestination.getPosition(), this.alpha);
//I have tried interpolate and lerp, same effect.
this.model.transform.setTranslation(position.x, 0, position.z);
}
}
谢谢!
编辑:
我已经将我的代码更改为一个更简单的问题,并使用固定的新 Vector3(5,0,5) 向量:
public void update(float delta) {
if (!this.pathQueue.isEmpty() && this.currentDestination == null) {
this.currentDestination = this.pathQueue.poll();
this.alpha = 0;
}
if (this.currentDestination != null) {
this.alpha += this.speed * delta;
this.currentPosition.lerp(new Vector3(5,0,5), this.alpha);
this.model.transform.setTranslation(this.currentPosition.x, 0, this.currentPosition.z);
}
}
它仍然会导致问题。同样的事情发生了!我很困惑。
我认为你的问题是这样的:
position.lerp(this.currentDestination.getPosition(), this.alpha);
您正在从位置更新到目的地,在每一帧更新位置之后,因此在下一帧上,您实际上是从新位置到结尾进行插值。 (因此,当您离目的地越近时,要插入的位置之间的差异就越小。)
我认为您 alpha
的更新是正确的,因此您希望在每一帧上从起点到终点进行插值。所以,我认为在开始和结束之间插值之前将 "position" 向量重置为开始应该会给你想要的行为。