Моя цель — игра в кости. Я использую javafx.
Первый вопрос: есть ли простой способ настроить 3D-окно в javafx. Для меня не имеет значения, нужно ли мне добавить изображение на каждую сторону кубика или я использую только одно изображение, которое оборачивает коробку. (После долгих исследований я ничего не нашел об этом.)
В приведенном ниже коде я создал панель стека, которая представляет собой трехмерный куб. Он построен из 6 прямоугольников, каждый из которых заполнен одной гранью игральной кости (от 1 до 6). Если я поверну панель стека на 180 градусов, прямоугольник, который должен быть на переднем плане, окажется на заднем плане, а тот, который был раньше, снова станет видимым.
Второй вопрос: как это исправить?
Или есть лучший способ понять это? Сначала я думал об использовании TriangleMesh, но он показался мне таким же сложным, как и мой вариант.
@FXML
private StackPane stack;
@Override
public void initialize(URL url, ResourceBundle rb) {
...
//other code
for (int i = 1; i < 7; i++){
Rectangle rt = getRectangle(i);
rt.setSmooth(true);
stack.getChildren().add(rt);
switch(i) {
case 1:
rt.setTranslateZ(100);
break;
case 2:
rt.getTransforms().add(new Rotate(270, 50,50,0,Rotate.X_AXIS));
rt.setTranslateZ(100*0.5);
rt.setHeight(100);
rt.setTranslateY(100*0.5);
break;
case 3:
rt.setTranslateZ(100*0.5);
rt.getTransforms().add(new Rotate(90, 50, 50, 0, Rotate.Y_AXIS));
rt.setWidth(100);
rt.setTranslateX(-(100*0.5-1));
break;
case 4:
rt.setTranslateZ(100*0.5);
rt.getTransforms().add(new Rotate(90,50,50,0,Rotate.Y_AXIS));
rt.setWidth(100);
rt.setTranslateX(100*0.5);
break;
case 5:
rt.setTranslateZ(100*0.5);
rt.setTranslateY(-(100*0.5));
rt.getTransforms().add(new Rotate(270,50,50,0, Rotate.X_AXIS));
rt.setHeight(100);
break;
case 6:
rt.setTranslateZ(0);
break;
}
private Rectangle getRectangle(int number){
Rectangle rt = new Rectangle(100, 100);
rt.setFill(new ImagePattern(loadImage(number)));
return rt;
}