Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Libgdx decal rotation around custom axis

I'm working app that uses Libgdx engine and decals in 3d space. Now I need to rotate decals around X,Y,Z axis, but around custom pivot point that stands somewhere in the 3d space.

I found that decals have transformationOffset field, which might work with some calculations, but is Vector2 only. It means that I can move pivot point only over X and Y axis. And when rotating decals over Y axis, wherever the pivot is, the result is the same.

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

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

I need to move pivot over Z axis, too.

Is there some workaround for this issue?

Tnx!

EDIT:

I have succeded to rotate decal over pivot point in 3d space, but only if pivot's and decals's Z position is the same. If they are not I don't get what I've expected.

This is the code that works for pivot with same Z value:

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);

And in tween I do this:

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

How to extend this to use and Z value for pivot. I'm trying to add and translation animation beside rotate to achive this, but the results is weird.

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);

Any idea how to combine translate and rotate animatio to get decal rotation in circle path over the pivot point?

like image 988
Veljko Avatar asked Sep 12 '14 09:09

Veljko


Video Answer


1 Answers

I will answer my own question I guess.

I have extended Decal class, changed transformationOffset to Vector3.

Then in transformVertices I have added tz value, like there already was tx and ty. And add tz in calculation for vertex position.

Simple as that.

If anyone knows why is this left out from native libgdx support, please let me know.

Cheers.

like image 81
Veljko Avatar answered Sep 26 '22 10:09

Veljko