У меня есть приложение, в котором все объекты сцены загружаются из .obj
файлов (они экспортируются из Blender). И мне нужно повернуть один из этих объектов вокруг определенной точки. В настоящее время у меня есть следующий код:
public void rotateTo() {
// translate to origin, rotate, translate back
Vector3f origin = new Vector3f();
Vector3f pivot = new Vector3f(.0f, .5f, .0f);
this.getTransform(this.transform);
this.transform.get(origin);
double angle = -Math.PI / 2;
double newX = origin.getX() + Math.cos(angle) * (pivot.getX() - origin.getX()) - Math.sin(angle) * (pivot.getY() - origin.getY());
double newY = origin.getY() + Math.sin(angle) * (pivot.getX() - origin.getX()) + Math.cos(angle) * (pivot.getY() - origin.getY());
this.transform.set(new Vector3f((float)newX, (float)newY, .0f), 0.15f);
this.setTransform(this.transform);
this.transform.set(origin, 0.15f);
this.setTransform(this.transform);
}
Где this
относится к TransformGroup
объекту, который мне нужно повернуть, а this.transform
относится к объекту Transform3D
.
Но этот метод работает не так, как я ожидал. Я также пробовал this и это решения, но они также не сработали для меня.
Думаю, может, попробовать проделать эту манипуляцию с помощью GeometryArray
, но не понимаю, как это сделать. Кроме того, я могу попытаться экспортировать свои объекты с разными исходными точками, но я думаю, что это не чистое решение, потому что тогда мне нужно было бы переместить их в правильные позиции с помощью кода.
Вот мой объект:
Я пытаюсь повернуть его вокруг зеленой точки, но во всех случаях он вращается вокруг красной точки, или вообще не вращается, или переводится в какую-то точку без вращения.
P.S. Я знаю, что Java3D - старая библиотека и может использовать более мощные инструменты, но это требование профессора моего университета, и я не могу отказаться от ее использования.