正交相机的旋转(Rotation of Orthographic Camera)

2019-08-31 13:35发布

我能够使用此代码旋转摄像头

camera.zoom = 3//in constructor
if(camera.zoom>1)
    {
    camera.zoom-=0.01f;
    camera.rotate(15);
    }

这是在做渲染,现在缩放效果正常工作,但变焦时完成我的屏幕保持与当前角度旋转。 如下图所示。

我想,在0度的缩放后我的屏幕停止。

Answer 1:

在您的代码段

**camera.zoom=3;**

和在每次迭代中你被0.01直到camera.zoom变焦照相机> 1,所以你有总共20次迭代用于变焦

然后用18度角迭代之后,将在360度旋转旋转。



Answer 2:

我写了这个方法来计算相机的当前角度:

public float getCameraCurrentXYAngle(Camera cam)
{
    return (float)Math.atan2(cam.up.x, cam.up.y)*MathUtils.radiansToDegrees;
}

然后我把这样的旋转方法:

camera.rotate(rotationAngle - getCameraCurrentXYAngle(camera));

此代码的工作,但它会在一个电话立即转动。 由速度旋转它,你需要计算合适的“rotationAngle”每帧。



Answer 3:

您是否尝试过旋转1.8度的倍数,每次重复? 然后,你的形象应该已经完成​​了多项完整旋转一次的200次迭代已经过去了。



Answer 4:

注意,电脑不能正确地代表最真实的数字!

在二进制0.01是周期数,所以它会被截断/舍入。

substrating /加浮点数几百次将增加的舍入误差,从而给你可怕的错误结果。

(例如,后200个substractions,你camera.zoom值将是〜1.0000019 - !不是1.0)

这就是为什么你的循环重复201次,(用1.8时在Alex的答案)给你的0.9900019变焦值和361.7996〜361.8旋转。

你可以使用libGDX插值功能:

time += Gdx.graphics.getDeltaTime(); //the rounding error is futile here,
//because it'll increase the animation time by max. 1 frame
camera.zoom = Interpolation.linear.apply(3, 1, Math.min(time, 1));
camera.rotate = Interpolation.linear.apply(0, 360, Math.min(time, 1));

这个代码将创建缩放从3到1和从0到360(简单地一个整体轮替])旋转的一个第二长的动画



文章来源: Rotation of Orthographic Camera