球体以一定速度旋转。 (24小时360度)
Rotation of a sphere with certain velocity. (360 degrees in 24 hours)
我正在尝试创建太阳系的 3D 模型。为此,我选择了 LibGDX 框架。目前我很困惑,如何以一定的速度旋转地球模型。我想让它在 24 小时内旋转 360 度。我做了一些尝试,将它旋转到每帧的某个微小的增量,因此总的来说,它在一分钟(或一小时)后给出 360 度。
所以我的问题是,实现它最方便的方法是什么?
如果您使用游戏引擎的增量时间在每一帧移动它,随着时间的推移可能会出现 build-up 错误。对于任何 long-running 动画(超过一分钟左右),您应该使用通过从当前时间减去开始时间计算得出的经过时间。然后使用经过的时间来获取当前的动画状态。那么相对于开始时间就永远不会有任何错误了。
我也喜欢划分动画在转换为浮点数以获取动画进度之前重复所花费的时间。这样我们就不会随着时间的推移而失去精度。
例如:
long startTime;
long animationRepeatTime = 24 * 60 * 60; // one rotation per 24 hours
@Override
public void start() {
//...
startTime = System.currentTimeMillis();
}
@Override
public void render() {
// ...
long now = System.currentTimeMillis();
long elapsed = now - startTime;
long animationElapsed = elapsed % animationRepeatTime;
float animationProgress = (float)animationElapsed / (float)animationRepeatTime;
// Use animationProgress to get the current animation state.
// For a rotating planet:
float degreesRotation = animationProgress * 360f;
// use degreesRotation to rotate the planet model.
}
我正在尝试创建太阳系的 3D 模型。为此,我选择了 LibGDX 框架。目前我很困惑,如何以一定的速度旋转地球模型。我想让它在 24 小时内旋转 360 度。我做了一些尝试,将它旋转到每帧的某个微小的增量,因此总的来说,它在一分钟(或一小时)后给出 360 度。
所以我的问题是,实现它最方便的方法是什么?
如果您使用游戏引擎的增量时间在每一帧移动它,随着时间的推移可能会出现 build-up 错误。对于任何 long-running 动画(超过一分钟左右),您应该使用通过从当前时间减去开始时间计算得出的经过时间。然后使用经过的时间来获取当前的动画状态。那么相对于开始时间就永远不会有任何错误了。
我也喜欢划分动画在转换为浮点数以获取动画进度之前重复所花费的时间。这样我们就不会随着时间的推移而失去精度。
例如:
long startTime;
long animationRepeatTime = 24 * 60 * 60; // one rotation per 24 hours
@Override
public void start() {
//...
startTime = System.currentTimeMillis();
}
@Override
public void render() {
// ...
long now = System.currentTimeMillis();
long elapsed = now - startTime;
long animationElapsed = elapsed % animationRepeatTime;
float animationProgress = (float)animationElapsed / (float)animationRepeatTime;
// Use animationProgress to get the current animation state.
// For a rotating planet:
float degreesRotation = animationProgress * 360f;
// use degreesRotation to rotate the planet model.
}