Pour mon projet, j'ai besoin de texte 2D dans une scène 3D (pas comme superposition!). J'ai donc essayé d'ajouter un BorderPane
avec Label
/Text
nœuds à ma scène:Texte 2D JavaFX avec arrière-plan dans la scène 3D
Le problème est cependant que le fond blanc du panneau est parfois chevauchement avec l'étiquette (ils ont le même la profondeur apparemment) quand je zoome, sort ou me déplace avec mon appareil photo.
Existe-t-il un moyen d '«élever» l'étiquette de son panneau? J'ai essayé de régler setDepthTest(true);
sans aucun effet.
Voici un exemple simple montrant le problème. La Xform
classe est de l'échantillon molécule d'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);
}
}
Je me demande si le même pour les boutons ... – jdub1581
@ jdub1581 Oui, il le fait! –
J'ai essayé le code ci-dessus, mais la cellule ne parvient pas à rendre dès que je l'ai décalée. Les décalages X et Y sont corrects: (libellé (BorderPane)) .translateZProperty(). Set (z); // Echec du rendu de la cellule si z! = 0 J'ai essayé de désactiver la mise en cache sur Text et BorderPane mais cela n'a pas aidé à voir la cellule. – Martin