我正在使用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中的值都是正确的,但不知何故贴花不会刷新和旋转。
答案 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,然后在每个轴上旋转,同时不覆盖任何其他轴。