2016-10-09 5 views
0

Я пытаюсь получить изометрический вид сетки. Сетка - это только часть основной сцены, поэтому я создал подсети, и я хочу добавить к ней камеру. Я хочу, чтобы иметь возможность приближать и выключать камеру и панорамировать ее вокруг сохранения угла обзора во время всей этой операции.Как настроить и преобразовать камеру в SubScene?

Вот что у меня есть без камеры:

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

Теперь добавьте камеру, как это в конструкторе MyView:

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

и сетка исчезает.

enter image description here

Я даже не делать каких-либо преобразований пока (я бы camera.getTransforms().addAll(new Rotate(-15, Rotate.Y_AXIS));). Что я делаю не так?

также, как я могу сказать, что подсеть займет какое-то пространство? Я не хочу указывать конкретный размер, потому что программа может работать на всех экранах.

ответ

0

Ваша камера расположена с одинаковыми z координатами как Group. Однако вы должны убедиться, что это на расстоянии между farClip и nearClip:

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

Кроме того, для изометрических видов Perspective камера неправильно Camera использовать. Используйте ParallelCamera вместо:

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

также, как я могу сказать subscene принять все пространство доступно?

Изменения типа продлен MyView к чему-то изменяемое и привязать размер SubScene к размеру MyView:

private class MyView extends Pane { 

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

 Смежные вопросы

  • Нет связанных вопросов^_^