gpt4 book ai didi

3D 场景中具有背景的 JavaFX 2D 文本

转载 作者:搜寻专家 更新时间:2023-11-01 02:07:20 27 4
gpt4 key购买 nike

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

enter image description here

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

有没有办法从面板中“提升”标签?我试过设置 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 节点嵌入到带样式的边框 Pane 中,并在场景中进行渲染,因此还为边框 Pane 设置缓存确实很有帮助。

borderPane.setCache(true);

你将从这里开始:

Cache text

为此:

Cache border pane

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

borderPane.setCacheHint(CacheHint.SCALE_AND_ROTATE);

cache hint

关于3D 场景中具有背景的 JavaFX 2D 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28753724/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com