2016-10-09 8 views
0

Ich versuche, eine isometrische Ansicht eines Gitters zu bekommen. Das Raster ist nur ein Teil der Hauptszene, also habe ich eine Subszene erstellt und möchte eine Kamera hinzufügen. Ich möchte in der Lage sein, die Kamera ein- und auszuzoomen und sie zu schwenken, um den Blickwinkel während all dieser Vorgänge zu erhalten.Wie man eine Kamera in einem Subscene einrichtet und transformiert?

Hier ist, was ich ohne die Kamera:

public class MyApp extends Application { 

    @Override 
    public void start(Stage stage) throws Exception { 

     Button actionButton = new Button("Placeholder\t\t\t\t\t\t\t\t\t\t\t\t"); 
     HBox hbox = new HBox(actionButton); 

     BorderPane mainPane = new BorderPane(new MyView(), null, null, hbox, null); 

     Scene scene = new Scene(mainPane); 
     stage.setScene(scene); 
     stage.show(); 
    } 

    private class MyView extends Group { 

     MyView() { 

      super(); 

      GridPane grid = new GridPane(); 
      for (int i = 0; i < 64; i++) { 
       Rectangle tile = new Rectangle(30, 30, Color.GREEN); 
       BorderPane pane = new BorderPane(tile); 
       pane.setBorder(new Border(new BorderStroke(null, BorderStrokeStyle.SOLID, 
                  null, null, null))); 
       grid.add(pane, i/8, i % 8); 
      } 

      Group root = new Group(); 
      root.getChildren().add(grid); 

      SubScene scene = new SubScene(root, 300, 300, true, SceneAntialiasing.BALANCED); 
      scene.setFill(Color.DARKCYAN); // just to see the area 

      getChildren().add(scene); 
     } 
    } 

    public static void main(String[] args) throws Exception { 

     launch(args); 
    } 
} 

enter image description here

Nun füge ich die Kamera wie dies im MyView Konstruktor:

Camera camera = new PerspectiveCamera(true); 
scene.setCamera(camera); 

und das Gitter verschwindet.

enter image description here

Ich habe noch nicht einmal jede Transformation noch (ich würde camera.getTransforms().addAll(new Rotate(-15, Rotate.Y_AXIS)); tun). Was mache ich falsch?

auch, wie kann ich der Subszene sagen, um den verfügbaren Platz zu nehmen? Ich möchte keine bestimmte Größe angeben müssen, da das Programm auf allen Arten von Bildschirmen ausgeführt werden kann.

Antwort

0

Ihre Kamera befindet sich in der gleichen Position z Koordinaten wie die Group. Jedoch Sie sicherstellen haben, ist es in einem Abstand zwischen farClip und nearClip:

PerspectiveCamera camera = new PerspectiveCamera(true); 
camera.setTranslateZ(-100); 
camera.setFieldOfView(120); 

Des Weiteren für isometrische Ansichten Perspektive Kamera ist die falsche Camera zu verwenden. Verwenden Sie ParallelCamera statt:

Camera camera = new ParallelCamera(); 
//camera.setRotationAxis(new Point3D(1, 1, 0)); 
//camera.setRotate(30); 
scene.setCamera(camera); 

auch, wie kann ich die subscene sagen zu nehmen, was Platz zur Verfügung steht?

die Art ändern, indem MyView etwas erweitert, um die Größe des SubScene auf die Größe des MyView resizable und binden:

private class MyView extends Pane { 

    MyView() { 
     ... 
     setPrefSize(300, 300); 
     scene.widthProperty().bind(widthProperty()); 
     scene.heightProperty().bind(heightProperty()); 
    } 
Verwandte Themen