Вращение переводной картинки 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, пожалуйста, дайте мне знать.
Приветствия.