JavaFX 2D文本与3D场景中的背景

对于我的项目,我需要3D场景中的2D文本(而不是叠加!)。 所以我尝试将带有Label / Text节点的BorderPane添加到我的场景中:

在此处输入图像描述

然而问题是,当我用相机放大,缩小或飞行时,面板的白色背景有时与标签重叠(它们显然具有相同的深度)。

有没有办法从其面板“提升”标签? 我试过设置setDepthTest(true); 没有效果。

这是一个显示问题的简单示例。 Xform类来自Oracle的分子样本( http://docs.oracle.com/javase/8/javafx/graphics-tutorial/sampleapp3d-code.htm#CJAGGIFG ):

 package mypackage; import mypackage.Xform; import javafx.application.Application; import javafx.scene.Group; import javafx.scene.PerspectiveCamera; import javafx.scene.Scene; import javafx.scene.SceneAntialiasing; import javafx.scene.layout.BorderPane; import javafx.scene.paint.Color; import javafx.scene.text.Text; import javafx.stage.Stage; public class Example extends Application { private Stage primaryStage; private final Group root = new Group(); @Override public void start(Stage primaryStage) throws Exception { this.primaryStage = primaryStage; primaryStage.setTitle("Example"); this.primaryStage.setWidth(500); this.primaryStage.setHeight(500); Scene scene = new Scene(this.root, 500, 500, true, SceneAntialiasing.BALANCED); scene.setFill(Color.WHITESMOKE); Text text = new Text(); text.setText("This is a text sample"); text.setStyle("-fx-font-size: 20;"); text.setCache(true); BorderPane borderPane = new BorderPane(); borderPane.setStyle("-fx-border-color: black;-fx-background-color: #66CCFF;"); borderPane.setTop(text); this.root.getChildren().add(borderPane); PerspectiveCamera camera = new PerspectiveCamera(true); camera.setNearClip(0.1); camera.setFarClip(10000.0); camera.setTranslateX(100); camera.setTranslateZ(-500); Xform cameraXform = new Xform(); Xform cameraXform2 = new Xform(); Xform cameraXform3 = new Xform(); cameraXform.getChildren().add(cameraXform2); cameraXform2.getChildren().add(cameraXform3); cameraXform3.getChildren().add(camera); //cameraXform3.setRotateZ(180.0); cameraXform.ry.setAngle(400.0); // 320 cameraXform.rx.setAngle(20.0); // 40 scene.setCamera(camera); this.primaryStage.setScene(scene); this.primaryStage.show(); } public static void main(String[] args) { System.setProperty("prism.lcdtext", "false"); System.setProperty("prism.text", "t2k"); launch(args); } } 

由于您将Text节点嵌入到样式化的边框窗格中,并在场景中渲染两者,因此设置边框窗格的缓存也会有所帮助。

 borderPane.setCache(true); 

你会从这个:

缓存文本

对此:

缓存边框窗格

此外,您可以设置此提示,以提高分辨率。

 borderPane.setCacheHint(CacheHint.SCALE_AND_ROTATE); 

缓存提示