如何在一瞬间旋转Decal超过一个轴

时间:2014-07-08 12:38:31

标签: rotation libgdx decal

我正在使用Decals处理Libdx应用。 贴花是3d世界中的2d精灵。

当我说:

时,我有问题
decal.setRotationX(angle)

一切正常,但当我说:

decal.setRotationX(angle);
decal.setRotationY(angle2);

贴花仅在Y轴上旋转。

如何解决这个问题? 我发现源代码中的Decal使用Quaternion进行轮换,但目前我不知道如何自定义它以满足我的要求。

提前Tnx!

编辑:

我设法使用以下方法围绕多个轴旋转贴花:

decal.getRotation()setEulerAngles(偏转,俯仰,滚动);

现在我的问题是如何使用TweenEngine设置动画效果?

在获取值方法中,我有:

returnValues[0] = target.getRotation().getYaw();
returnValues[1] = target.getRotation().getPitch();
returnValues[2] = target.getRotation().getRoll();

在设定值方法中,我有:

target.getRotation().setEulerAngles(newValues[0], newValues[1],
                newValues[2]);

但是贴花没有移动或动画,它被卡在一个位置(在XYZ轴上略微旋转)。

任何想法,TweenEngine中的值都是正确的,但不知何故贴花不会刷新和旋转。

1 个答案:

答案 0 :(得分:1)

如果你只想做一次,你可以这样做:

decal.rotateX(angleX);
decal.rotateY(angleY);
decal.rotateZ(angleZ);

这将"添加"但是给出了当前角度。

另一种方法是使用Quaternion的<{1}}:

Decal

下图显示&#34; yaw&#34;,&#34; pitch&#34;和&#34; roll&#34;的意思是:

Roll, pitch, yaw http://i.msdn.microsoft.com/dynimg/IC79189.gif

编辑:我刚看到decal.getRotation().setEulerAngles(yaw, pitch, roll); 的JavaDoc,它说不应该修改返回的四元数!我还检查了代码,Decal.getRotation()的所有其他方法都设置了内部Decal标记,这会导致贴花在下次渲染时发生变化。 update未设置此标记,因此对其的更改不会被识别。

目前似乎没有真正干净简单的方法同时在所有三个轴上设置旋转。解决方法可能如下所示:

Decal.getRotation()

首先将所有角度重置为0,然后在每个轴上旋转,同时不覆盖任何其他轴。