Cube не исчезает после того, как находится за пределами расстояния клипа

#javafx

#javafx

Вопрос:

Моя проблема в том, что после перемещения моей камеры от куба (направление -z) с помощью setFarClip (-1000) в положение -1010 она не исчезнет.

Вот код:

 @Override
public void start(Stage stage) throws IOException {

    Box box = new Box(100,100,100);
    Camera cam = new PerspectiveCamera(true);
    Group group = new Group();
    group.getChildren().add(box);

    Scene scene = new Scene(group,1920,1080);
    scene.setCamera(cam);

    cam.translateXProperty().set(0);
    cam.translateYProperty().set(0);
    cam.translateZProperty().set(-100);
    cam.setNearClip(1);
    cam.setFarClip(-1000);
    scene.setFill(Color.SILVER);


    System.out.println("CamX: " scene.getCamera().getTranslateX()
             ", CamY: " scene.getCamera().getTranslateY() ", CamZ: " scene.getCamera().getTranslateZ());
    stage.addEventHandler(KeyEvent.KEY_PRESSED, event ->{

        switch(event.getCode())
        {
            case W :
                cam.translateZProperty().set(cam.getTranslateZ() 10);
                System.out.println("CamX: " scene.getCamera().getTranslateX()
                         ", CamY: " scene.getCamera().getTranslateY() ", CamZ: " scene.getCamera().getTranslateZ());
            break;


            case A:
                cam.translateXProperty().set(cam.getTranslateX()-10);
                System.out.println("CamX: " scene.getCamera().getTranslateX()
                         ", CamY: " scene.getCamera().getTranslateY() ", CamZ: " scene.getCamera().getTranslateZ());
                break;

            case D:
                cam.translateXProperty().set(cam.getTranslateX() 10);
                System.out.println("CamX: " scene.getCamera().getTranslateX()
                         ", CamY: " scene.getCamera().getTranslateY() ", CamZ: " scene.getCamera().getTranslateZ());
                break;


            case S:
                cam.translateZProperty().set(cam.getTranslateZ()-10);
                System.out.println("CamX: " scene.getCamera().getTranslateX()
                         ", CamY: " scene.getCamera().getTranslateY() ", CamZ: " scene.getCamera().getTranslateZ());
            break;
        }


    });

    stage.setTitle("Test");
    stage.setScene(scene);
    stage.show();

}

public static void main(String[] args) {
    launch();
}
 

Вместо вывода scence.getCamera().getTranslateX() я попробовал cam.getTranslateX() , который всегда выдавал 0.0. Таким образом, в любом случае он всегда регистрирует позицию как 0.0 и никогда не будет находиться за пределами плоскости дальнего клипа или чего-то совершенно другого, чего я не понял или не рассмотрел. Спасибо за каждый совет.

Комментарии:

1. При предоставлении примера, пожалуйста, предоставьте инструкции по воспроизведению. Например, вы могли бы написать что-то вроде: «Приложение запустится с камерой внутри куба, поэтому все, что вы увидите, это белый экран для внутренней части куба. Удерживайте нажатой клавишу S. Через некоторое время куб станет видимым. Продолжайте удерживать нажатой клавишу S, просматривая System.out. Как только напечатанное значение достигнет значения ниже -1000, я ожидаю, что куб исчезнет, но он остается видимым, даже если вы продолжаете удерживать нажатой клавишу S, и он становится все меньше и дальше .. » -> это помогло бы (очень).

2. Большое спасибо за помощь. Я буду иметь это в виду для будущих вопросов. Описывая это так, как вы это сделали, действительно намного легче понять проблему.

Ответ №1:

У вас неправильный знак, вместо:

 cam.setFarClip(-1000);
 

запись:

 cam.setFarClip(1000);
 

Отрицательное значение для farClip означало бы обрезку за камерой, что не имеет смысла.

Возможно, вы захотите просмотреть направления координат для осей:

В пространстве координат сцены JavaFX плоскость проекции камеры по умолчанию находится в точке Z = 0, а система координат камеры выглядит следующим образом:

  • Ось X указывает вправо
  • Ось Y указывает вниз
  • Ось Z указывает в сторону от средства просмотра или на экран.

Таким образом, положительный Z (который является измерением для дальнего клипа в ориентации камеры по умолчанию) — это местоположение на экране, а отрицательный Z будет местоположением за экраном.