У меня есть «javafx.scene.shape.Box» с «javafx.scene.shape.MeshView», показанным в его координатах.
Я хочу повернуть это поле на 90 градусов с помощью клавиатуры (возможно, WASDQE, WS, QE и AD для разных осей).Я также хочу сохранить вращение блока в JSON и затем снова установить его.
То, что я пробовал (свойства box- и meshview связаны):
box.setRotate(box.getRotate + angle); // angle being +-90 and reset on > 360 or < -360
box.setRotationAxis(Rotate.X_AXIS); // Axis depending on key pressed
Этот подход работает для текущей оси, и он работает для сохранения и загрузки с использованием JSON, так как я могу установить / получить это значение.Однако при этом кажется, что я не могу повернуть все углы, потому что, когда я меняю ось вращения, он забывает предыдущее вращение и начинает с поворота «по умолчанию» / «запуск».
У меня естьтакже попытался сделать это, как показано ниже:
this.setRotationAxis(this.getRotationAxis().normalize().add(Rotate.X_AXIS));
Этот подход приводит к вращению прямоугольника на нескольких осях, другими словами, кажется, что он запоминает предыдущие оси, но он не вращает ось, которую я только что добавилугол дан.Коробка в конечном итоге наклоняется.
Последнее, что я пытался, это добавить вращение как преобразование:
this.getTransforms().add(new Rotate(angle, Rotate.X_AXIS));
(
also tried this with some code I found that did this with inverseDeltaTransform (where node being the box):
private void addRotate(Node node, Point3D rotationAxis, double angle) {
ObservableList<Transform> transforms = node.getTransforms();
try {
for (Transform t : transforms) {
rotationAxis = t.inverseDeltaTransform(rotationAxis);
}
} catch (NonInvertibleTransformException ex) {
throw new IllegalStateException(ex);
}
transforms.add(new Rotate(angle, rotationAxis));
}
)
Однако этот подход оставляет мне две проблемы.
Проблема 1: Если я рендеринг окна, он вращается очень хорошо, но если я рендеринг сетки, он, кажется, вращается вокруг оси, а не вращается на месте.
Проблема 2: Еслия добавляю вращение с помощью преобразований, как сохранить текущее вращение в JSON, а затем снова применить его при загрузке?box.getRotationAxis () и box.getRotate () теперь будут просто отображать значения по умолчанию, как будто box никогда не поворачивается, и box.getTransforms (), кажется, не облегчает это.
Еще один вопрос оtransforms: список преобразований создается с каждым поворотом. Нужно ли очищать этот список, чтобы избежать проблем с памятью, и будет ли очистка списка влиять на текущий оборот?