我正在用Decals开发Libdx应用程序。贴花是3d世界中的二维精灵。
我有问题当我说:
decal.setRotationX(angle)一切正常,但当我说:
decal.setRotationX(angle);
decal.setRotationY(angle2);贴花只绕Y轴旋转。
如何处理这个问题?我已经发现,Decal在源代码中使用四元数作为旋转,但目前我不知道如何定制它来满足我的需求。
Tnx提前!
编辑:
我设法用以下几个轴旋转贴花:
Decal.getRotation().setEulerAngles(偏航,俯仰,滚动);
现在我的问题是如何用TweenEngine动画这个?
在get值方法中,我有:
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中的值是正确的,但不知何故,标记并不是刷新和旋转。
发布于 2014-07-08 12:48:51
如果你只想做一次,你可以这样做:
decal.rotateX(angleX);
decal.rotateY(angleY);
decal.rotateZ(angleZ);这将“添加”给定的角度到当前的一个。
另一种方法是使用Quaternion的旋转Decal。
decal.getRotation().setEulerAngles(yaw, pitch, roll);下图显示了“偏航”、“俯仰”和“滚动”的含义:
滚动,俯仰,偏航http://i.msdn.microsoft.com/dynimg/IC79189.gif
编辑:我刚刚看到了JavaDoc of Decal.getRotation(),它说返回的四元数不应该被修改!我还检查了代码和Decal的所有其他方法设置了一个内部update标志,这将导致标记在下次呈现时更改。Decal.getRotation()没有设置此标志,因此对它的更改不会被识别。
似乎目前没有真正干净和简单的方式来设置旋转在所有三个轴在同一时间。解决办法可能如下所示:
decal.setRotationX(0);
decal.setRotationY(0);
decal.setRotationZ(0);
decal.rotateX(angleX);
decal.rotateY(angleY);
decal.rotateZ(angleZ);它首先将所有角度重置为0,然后在每个轴上旋转,而不覆盖任何其他轴。
https://stackoverflow.com/questions/24632095
复制相似问题