立方体在超出 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 是屏幕后面的位置。
我的问题是,在使用 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 是屏幕后面的位置。