4

私のプロジェクトでは、3D シーン内に 2D テキストが必要です (オーバーレイとしてではありません!)。だから私は自分のシーンBorderPaneLabel/ノードを追加しようとしました:Text

ここに画像の説明を入力

ただし、問題は、ズームイン、ズームアウト、またはカメラで飛び回ると、パネルの白い背景がラベルと重なることがあります (明らかに同じ深さです)。

パネルからラベルを「持ち上げる」方法はありますか? 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);
    }

}
4

1 に答える 1