2016-12-15 9 views
2

Je veux simuler la distorsion de perspective des boîtes et des rectangles. Mon objectif est de déformer la boîte et l'image, comme si la caméra était inclinée et déplacée. Mais je ne suis pas vraiment comment utiliser la PerspectiveCamera.JavaFx PerspectiveCamera - fixedEyeAtCameraZero flag - quand vrai, tous les objets disparaissent

Lorsque je définis le fixedEyeAtCameraZero sur false, je peux voir la boîte et l'image à l'écran. Mais changer la taille de la fenêtre provoque d'étranges changements de perspective orthographique qui ne sont pas réalistes.

D'autre part, lorsque je mets fixedEyeAtCameraZero à true, tout ce que je vois est une fenêtre vide.

Faux: false

vrai: true

Voici le code, avec le drapeau incriminé à la ligne 51.

package sample; 
import javafx.application.Application; 
import javafx.geometry.Point3D; 
import javafx.scene.Group; 
import javafx.scene.PerspectiveCamera; 
import javafx.scene.Scene; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.shape.Box; 
import javafx.scene.shape.DrawMode; 
import javafx.scene.shape.Rectangle; 
import javafx.scene.transform.Rotate; 
import javafx.stage.Stage; 

public class Example_Box extends Application { 
    @Override 
    public void start(Stage stage) { 

     //Drawing a Box 
     Box box2 = new Box(); 

     //Setting the properties of the Box 
     box2.setWidth(100.0); 
     box2.setHeight(100.0); 
     box2.setDepth(100.0); 

     //Setting the position of the box 
     box2.setTranslateX(30); //450 
     box2.setTranslateY(90);//150 
     box2.setTranslateZ(300); 

     //Setting the drawing mode of the box 
     box2.setDrawMode(DrawMode.LINE); 

     //Drawing an Image 
     Image image = new Image("Lenna.png"); 
     ImageView imageView = new ImageView(image); 
     imageView.setTranslateX(200); 
     imageView.setTranslateY(150); 
     imageView.setTranslateZ(200); 

     //imageView.getTransforms().add(new Rotate(30, 50, 30)); 

     //Creating a Group object 
     Group root = new Group(box2, imageView); 

     //Creating a scene object 
     Scene scene = new Scene(root, 600, 300); 

     //Setting camera 
     PerspectiveCamera camera = new PerspectiveCamera(true); 
     camera.setTranslateX(30); 
     camera.setTranslateY(0); 
     camera.setTranslateZ(-100); 

     camera.setRotationAxis(new Point3D(1,0,0)); 
     scene.setCamera(camera); 

     //Setting title to the Stage 
     stage.setTitle("Drawing a Box"); 

     //Adding scene to the stage 
     stage.setScene(scene); 

     //Displaying the contents of the stage 
     stage.show(); 
    } 
    public static void main(String args[]){ 
     launch(args); 
    } 
} 

Répondre

0

Essayez de changer la valeur farClip. Par défaut, la valeur farClip est 100 dans la caméra perspective FX.

camera.setFarClip(2000.0); 

Avec l'ajout ci-dessus le code de pièce, je pouvais voir la boîte. Si je déplace la caméra plus loin (dans la direction Z), je pouvais voir l'image aussi,

camera.setTranslateZ(-1000); 

Référence: http://www.dummies.com/programming/java/javafx-add-a-perspective-camera/