立方体在超出 FarClip 距离后不会消失

Cube doesn't disappear after being beyond the FarClip distance

我的问题是,在使用 setFarClip(-1000) 将我的相机从立方体(-z 方向)移开到位置 -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,并且永远不会超出 farclip 平面或我没有掌握或考虑的完全不同的东西。谢谢你的每一个提示。

你打错了,不是:

cam.setFarClip(-1000);

写:

cam.setFarClip(1000);

farClip 的负值意味着在相机后面剪辑,这是没有意义的。

您可能想要查看 coordinate directions for axes

In the JavaFX scene coordinate space, the default camera's projection plane is at Z=0 and camera coordinate system is as follows:

  • X-axis points to the right

  • Y-axis points down

  • Z-axis points away from the viewer or into the screen.

因此,正 Z(默认相机方向下 farClip 的测量值)是屏幕内的位置,负 Z 是屏幕后面的位置。