Libgdx贴纸围绕自定义轴旋转

时间:2014-09-12 09:01:19

标签: rotation libgdx decal

我工作的应用程序使用Libgdx引擎并在3d空间贴花。 现在我需要围绕X,Y,Z轴旋转贴花,但是绕着自定义枢轴点旋转,它位于3d空间的某个位置。

我发现贴花有transformOffset字段,这可能适用于某些计算,但仅适用于Vector2。这意味着我只能在X和Y轴上移动枢轴点。 当在Y轴上旋转贴花时,无论旋转点在哪里,结果都是相同的。

decal.transformationOffset = new Vector2(0, -5);

decal.rotateX(newValues[0]);
decal.rotateY(newValues[1]);
decal.rotateZ(newValues[2]);

我也需要在Z轴上移动枢轴。

此问题是否有解决方法?

TNX!

修改

我已经成功在3d空间中旋转贴花超过枢轴点,但只有当旋转位置和贴花的Z位置相同时。如果他们不是,我就不会得到我所期望的。

这是适用于具有相同Z值的pivot的代码:

decal.transformationOffset = new Vector2(pivotPosition.x - decal.getPosition().x, pivotPosition.y - decal.getPosition().y);
Tween.to(decal, DecalTween.XYZ_ROTATION, 5f).target(0, 360, 0).repeatYoyo(Tween.INFINITY, 0f).start(tweenManager);

在补间我这样做:

target.setRotationX(0);
target.setRotationY(0);
target.setRotationZ(0);
target.rotateX(newValues[0]);
target.rotateY(newValues[1]);
target.rotateZ(newValues[2]);

如何将此扩展为使用,将Z值扩展为pivot。我试图在旋转旁边添加和翻译动画以实现这一点,但结果很奇怪。

Tween.to(decal, DecalTween.MOVE_XYZ, 2.5f).target(decal.getPosition().x, decal.getPosition().y, pivotPosition.z - decal.getPosition().z).repeatYoyo(Tween.INFINITY, 0f).start(tweenManager);
    decal.transformationOffset = new Vector2(pivotPosition.x - decal.getPosition().x, pivotPosition.y - decal.getPosition().y);
Tween.to(decal, DecalTween.XYZ_ROTATION, 5f).target(0, 360, 0).repeatYoyo(Tween.INFINITY, 0f).start(tweenManager);

任何想法如何组合平移和旋转动画以在枢轴点上的圆形路径中获得贴花旋转?

1 个答案:

答案 0 :(得分:3)

我猜我会回答自己的问题。

我已经扩展了Decal类,将transformationOffset更改为Vector3。

然后在transformVertices中我添加了tz值,就像已经有tx和ty一样。并在计算顶点位置时添加tz。

这很简单。

如果有人知道为什么原来的libgdx支持遗漏了,请告诉我。

干杯。