Вращение переводной картинки Libgdx вокруг пользовательской оси

Я работаю приложение, которое использует движок Libgdx и переводные картинки в 3D пространстве. Теперь мне нужно повернуть декали вокруг оси X,Y,Z, но вокруг пользовательской точки вращения, которая находится где-то в трехмерном пространстве.

Я обнаружил, что у наклеек есть поле translationOffset, которое может работать с некоторыми вычислениями, но только для Vector2. Это означает, что я могу перемещать точку разворота только по осям X и Y. И при вращении надписей вокруг оси Y, где бы ни находилась ось, результат одинаков.

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

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

Мне тоже нужно переместить поворот по оси Z.

Есть ли какое-то решение этой проблемы?

Tnx!

РЕДАКТИРОВАТЬ:

Мне удалось повернуть наклейку над точкой поворота в трехмерном пространстве, но только если положение оси поворота и надписей одинаково. Если нет, я не понимаю, чего я ожидал.

Это код, который работает для Pivot с тем же значением Z:

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 для пивота. Я пытаюсь добавить анимацию перевода рядом с вращением, чтобы добиться этого, но результаты странные.

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 ответ

Решение

Я отвечу на мой собственный вопрос, я думаю.

Я расширил класс Decal, изменил translationOffset на Vector3.

Затем в transformVertices я добавил значение tz, как будто уже были tx и ty. И добавить tz в расчете для позиции вершины.

Просто как тот.

Если кто-нибудь знает, почему это исключено из собственной поддержки libgdx, пожалуйста, дайте мне знать.

Приветствия.

Другие вопросы по тегам