private View() {
      box = new Box(10, 10, 10);
      camera = new PerspectiveCamera(true);

      rotateX = new Rotate(-20, Rotate.X_AXIS);
      rotateY = new Rotate(-20, Rotate.Y_AXIS);
      rotateZ = new Rotate(-20, Rotate.Z_AXIS);
      translateZ = new Translate(0, 0, -100);

      camera.getTransforms().addAll(rotateX, rotateY, rotateZ, translateZ);

      Group group = new Group(box, camera);
      scene = new Scene(group, 640, 480);
      scene.setCamera(camera);
    }
예제 #2
0
  @Override
  public void start(Stage stage) {
    configuration();

    Constants constants = Constants.getInstance();

    this.stage = stage;

    Group root = new Group();
    Scene scene = new Scene(root, constants.getWidth(), constants.getHeight());
    scene.setCamera(new PerspectiveCamera());
    scene.setFill(null);
    stage.setScene(scene);

    try {
      root.getChildren().add(new Binder(this, constants.getFactories()));
    } catch (IOException ex) {
      root.getChildren().add(new Label("IOError"));
    }

    stage.initStyle(StageStyle.TRANSPARENT);
    stage.show();
  }
예제 #3
0
  @SuppressWarnings({"unused", "unchecked", "rawtypes"})
  @Override
  public void start(Stage stage) throws Exception {
    // TODO Auto-generated method stub

    //		dp.setView(50, 0, 15, 20);
    //		dp.setView(5, 0, 0, 20);
    dp.setView(50, 0, 0, 20);

    Path sfx = getFXShape(target.getShapeList(dp));

    rotationGroup = new Group(sfx);
    rotationGroup.setRotationAxis(Rotate.Y_AXIS);

    //		Pane root = new Pane(rotationGroup);

    //		//Create scene without a depth buffer
    //		Scene scene = new Scene(root, 600, 600);

    // Create scene with a depth buffer
    Scene scene = new Scene(rotationGroup, windowWidth, windowHeight, true);

    //		//Disable depth test from this node and its children
    //		rotationGroup.setDepthTest(DepthTest.DISABLE);

    scene.setCamera(new PerspectiveCamera());
    stage.setScene(scene);
    stage.show();

    rotationGroup
        .getScene()
        .setOnMouseClicked(
            new EventHandler<MouseEvent>() {
              @Override
              public void handle(MouseEvent e) {
                // TODO Auto-generated method stub
                System.out.println("fx: Mouse Clicked " + e.getX() + ", " + e.getY());
                ((DrawWFPanel) dp.gettCanvas()).mouseClicked((int) e.getX(), (int) e.getY());
                updateView();
              }
            });

    rotationGroup
        .getScene()
        .setOnMousePressed(
            new EventHandler<MouseEvent>() {
              @Override
              public void handle(MouseEvent e) {
                // TODO Auto-generated method stub
                System.out.println("fx: Mouse Pressed " + e.getX() + ", " + e.getY());
                ((DrawWFPanel) dp.gettCanvas()).mousePressed((int) e.getX(), (int) e.getY());
                updateView();
              }
            });

    rotationGroup
        .getScene()
        .setOnMouseMoved(
            new EventHandler<MouseEvent>() {
              @Override
              public void handle(MouseEvent e) {
                // TODO Auto-generated method stub
                System.out.println("fx: Mouse Moved " + e.getX() + ", " + e.getY());
                ((DrawWFPanel) dp.gettCanvas()).mouseMoved((int) e.getX(), (int) e.getY());

                if (((DrawWFPanel) dp.gettCanvas()).mouseMode == DrawWFPanel.MODIFY_TARGET) {
                  rotationGroup.getScene().setCursor(Cursor.CROSSHAIR);
                } else {
                  rotationGroup.getScene().setCursor(Cursor.DEFAULT);
                }

                //				updateView();
              }
            });

    rotationGroup
        .getScene()
        .setOnMouseDragged(
            new EventHandler<MouseEvent>() {
              @Override
              public void handle(MouseEvent e) {
                // TODO Auto-generated method stub
                System.out.println("fx: Mouse Dragged " + e.getX() + ", " + e.getY());
                ((DrawWFPanel) dp.gettCanvas()).mouseDragged((int) e.getX(), (int) e.getY());
                updateView();
              }
            });
  }
예제 #4
0
파일: Main.java 프로젝트: jkwhite/caspar
  public void start(final Stage stage) {
    for (ConditionalFeature f : EnumSet.allOf(ConditionalFeature.class)) {
      System.err.println(f + ": " + Platform.isSupported(f));
    }
    Rectangle2D screen = Screen.getPrimary().getVisualBounds();
    final Random rand = new Random();

    /*
    final Group starfield = new Group();
    for(int i=0;i<66;i++) {
        int size = rand.nextInt(3)+1;
        if(size==3) {
            size = rand.nextInt(3)+1;
        }
        Circle circ = new Circle(rand.nextInt((int)screen.getWidth()), rand.nextInt(200+(int)screen.getHeight())-200,
            size);
        circ.setFill(Color.rgb(200,200,200+rand.nextInt(56)));
        circ.setTranslateZ(1+rand.nextInt(40));
        starfield.getChildren().add(circ);
    }
    */
    final List<Starfield> stars = new ArrayList<>();
    for (int i = 0; i < 10; i++) {
      int sw = (int) screen.getWidth(), sh = (int) screen.getHeight();
      Starfield sf = new Starfield(rand, -sw, -sh, 2 * sw, 2 * sh, rand.nextInt(30) + 10);
      sf.setTranslateZ(rand.nextInt(2000) + 50);
      stars.add(sf);
    }
    // final Starfield starfield2 = new Starfield(rand, -200, -200, (int)screen.getWidth(),
    // (int)screen.getHeight()+200, 40);

    final Ruleset1D rules =
        new Ruleset1D(new int[] {Colors.randomColor(rand), Colors.randomColor(rand)});
    final Ruleset rules2 = new Rulespace1D(rules);
    // Rule rule = rules.random(rand).next();
    Iterator<Rule> it = rules.iterator();
    GridPane gridp = new GridPane();
    int i = 0, j = 0;
    while (it.hasNext()) {
      Rule rule = it.next();
      CA ca = new CA(rule, new RandomInitializer(), rand, 42, 100, 100);
      Plane plane = ca.createPlane();
      ImageView imview = new ImageView(plane.toImage());
      imview.setSmooth(true);
      imview.setFitWidth(30);
      imview.setPreserveRatio(true);
      gridp.add(imview, i, j);
      if (++i == 16) {
        i = 0;
        j++;
      }
    }
    // gridp.setScaleX(0.3);
    // gridp.setScaleY(0.3);
    // gridp.setPrefSize(100*3/3, 100*3/3);
    // gridp.setMaxSize(100*3/3, 100*3/3);

    final double XTRANS = screen.getWidth() / 2 - 30 * 16 / 2;
    final double YTRANS = screen.getHeight() / 2 - 30 * 16 / 2;
    // gridp.setTranslateX((screen.getWidth()/2+100*16/2)*0.3);
    // gridp.setTranslateX(0);
    gridp.setTranslateX(XTRANS);
    gridp.setTranslateY(YTRANS);
    // gridp.setAlignment(Pos.CENTER);
    Group grid = new Group(gridp);
    // grid.setTranslateX(0);
    // grid.setTranslateY(0);

    // gridp.relocate(-400, -400);
    // gridp.setTranslateX(-300);
    // gridp.setTranslateY(-150);

    /*
    final RotateTransition rt = new RotateTransition(Duration.millis(3000), gridp);
    rt.setByAngle(180);
    rt.setCycleCount(4);
    rt.setAutoReverse(true);
    */
    // rt.setAutoReverse(false);

    /*`
    final BorderPane border = new BorderPane();
    */
    // Label title = new Label("EXPLORATIONS IN CELLULAR SPACES");
    Label title = new Label("E  X  P  L  O  R  A  T  I  O  N  S");
    title.setFont(new Font("Helvetica Neue Condensed Bold", 36));
    title.setTextFill(Color.WHITE);
    // Label title2 = new Label("IN CELLULAR SPACES");
    Label title2 = new Label("EXPLORATIONS IN CELLULAR SPACES");
    title2.setFont(new Font("Helvetica Neue Condensed Bold", 28));
    title2.setTextFill(Color.WHITE);
    /*`
    title.setAlignment(Pos.CENTER);
    title.setContentDisplay(ContentDisplay.CENTER);
    title.setTextAlignment(TextAlignment.CENTER);
    */
    final HBox toptitle = new HBox();
    toptitle.setAlignment(Pos.CENTER);
    toptitle.getChildren().add(title);
    toptitle.setTranslateX(XTRANS);
    toptitle.setTranslateY(YTRANS - 36);

    final HBox btitle = new HBox();
    btitle.setAlignment(Pos.CENTER);
    title2.setAlignment(Pos.CENTER);
    btitle.getChildren().add(title2);
    btitle.setTranslateX(XTRANS);
    // btitle.setTranslateX(screen.getWidth()/2-title2.getPrefWidth()/2);
    btitle.setTranslateY(YTRANS + 30 * 16);

    Group border = new Group();
    // border.getChildren().add(toptitle);
    for (Starfield st : stars) {
      border.getChildren().add(st);
    }
    // border.getChildren().add(starfield2);
    border.getChildren().add(btitle);
    border.getChildren().add(grid);

    final List<TranslateTransition> tts = new ArrayList<>();
    final TranslateTransition tt = new TranslateTransition(Duration.millis(6000), grid);
    tt.setByY(2000);
    tts.add(tt);
    for (Starfield sf : stars) {
      TranslateTransition st = new TranslateTransition(Duration.millis(6000), sf);
      st.setByY(200);
      st.setByZ(100 + rand.nextInt(100));
      tts.add(st);
    }
    /*
    final TranslateTransition tt2 = new TranslateTransition(Duration.millis(6000), starfield1);
    tt2.setByY(200);
    tt2.setByZ(200);
    final TranslateTransition tt3 = new TranslateTransition(Duration.millis(6000), starfield2);
    tt3.setByY(300);
    tt3.setByZ(200);
    */
    // final ParallelTransition infinite = new ParallelTransition(tt, tt2, tt3);
    final ParallelTransition infinite =
        new ParallelTransition(tts.toArray(new TranslateTransition[0]));

    final BorderPane ctrl = new BorderPane();
    // ctrl.setPrefSize(200, 100);
    // ctrl.setMaxSize(200, 100);
    Label start = new Label("Start");
    start.setTextFill(Color.WHITE);
    start.setFont(new Font("Helvetica", 28));
    start.setAlignment(Pos.CENTER_LEFT);
    start.setContentDisplay(ContentDisplay.CENTER);
    start.setTranslateX(XTRANS + 30 * 16 + 100);
    start.setTranslateY(screen.getHeight() / 2);
    // start.setTranslateX(-400);
    Circle ico = new Circle(15);
    ico.setOnMouseClicked(
        new EventHandler<MouseEvent>() {
          @Override
          public void handle(MouseEvent e) {
            FadeTransition ft = new FadeTransition(Duration.millis(500), ctrl);
            ft.setFromValue(1.0);
            ft.setToValue(0.0);
            FadeTransition tft = new FadeTransition(Duration.millis(500), btitle);
            tft.setFromValue(1.0);
            tft.setToValue(0.0);
            ParallelTransition pt = new ParallelTransition(ft, tft);
            // TranslateTransition fft = new TranslateTransition(Duration.millis(3000), border);
            // tt.setByY(2000);
            SequentialTransition st = new SequentialTransition(pt, infinite);
            st.setOnFinished(
                new EventHandler<ActionEvent>() {
                  public void handle(ActionEvent e) {
                    State state = State.state().rules(rules2).random(new Rand()).size(400);
                    Iterator<Rule> it = state.rules().random(state.random().create());
                    CA ca =
                        new CA(
                            it.next(),
                            new RandomInitializer(),
                            state.random().create(),
                            0,
                            state.size(),
                            state.size());
                    state.ca(ca);
                    // final Futures futures = new Futures(rules2, new Rand());
                    final Controls controls = new Controls(state);
                    // controls.setTranslateX(screen.getWidth()/2 -
                    // futures.getPossibilityWidth()/2);
                    // controls.setTranslateY(screen.getHeight()/2 -
                    // futures.getPossiblityHeight()/2-20);

                    // controls.setTranslateX(screen.getWidth()/2 - (3*200+2*10)/2);
                    // controls.setTranslateY(screen.getHeight()/2 - (3*200+2*10)/2-20);

                    for (Starfield sf : stars) {
                      state.addListener(sf);
                      // futures.addFutureListener(sf);
                    }
                    // futures.addFutureListener(starfield1);
                    // futures.addFutureListener(starfield2);
                    border.getChildren().remove(grid);
                    border.getChildren().remove(btitle);
                    // border.getChildren().add(futures);
                    border.getChildren().add(controls);
                    // futures.setTranslateX(screen.getWidth()/2 - futures.getPossibilityWidth()/2);
                    // futures.setTranslateY(screen.getHeight()/2 -
                    // futures.getPossiblityHeight()/2);
                    // border.setCenter(futures);
                    // border.setAlignment(futures, Pos.CENTER);
                  }
                });
            st.play();
          }
        });
    // Sphere ico = new Sphere(15);
    // ico.setDrawMode(DrawMode.LINE);
    ico.setFill(Color.rgb(10, 10, 10));
    ico.setStroke(Color.WHITE);
    ico.setStrokeWidth(3);
    ico.setTranslateX(XTRANS + 30 * 16 + 100);
    ico.setTranslateY(screen.getHeight() / 2);
    // ctrl.setTop(ico);
    ctrl.setCenter(ico);
    /*
    border.setRight(ctrl);

    border.setMaxSize(800,600);
    border.setPrefSize(800,600);
    */
    border.getChildren().add(ctrl);
    Group root = new Group();
    root.getChildren().add(border);
    // root.setAutoSizeChildren(false);
    // root.setLayoutX(-400);
    // root.setLayoutY(-400);
    // Scene scene = new Scene(root, 1200, 1000);
    Scene scene = new Scene(root, 1280, 1024, true, SceneAntialiasing.DISABLED);
    scene.setFill(Color.BLACK);
    scene.setCamera(new PerspectiveCamera());

    // set Stage boundaries to visible bounds of the main screen
    stage.setX(screen.getMinX());
    stage.setY(screen.getMinY());
    stage.setWidth(screen.getWidth());
    stage.setHeight(screen.getHeight());

    stage.setTitle("Explorations in Cellular Spaces");
    stage.setScene(scene);
    stage.setResizable(false);
    // root.autosize();
    // stage.sizeToScene();
    stage.show();
  }
예제 #5
0
  @Override
  public void start(Stage stage) {

    Group spheroidGroup = new Group();
    for (int i = 0; i < 50; i++) {
      Random r = new Random();
      // A lot of magic numbers in here that just artificially constrain the math
      float randomMajorRadius = (float) ((r.nextFloat() * 300) + 50);
      float randomMinorRadius = (float) ((r.nextFloat() * 300) + 50);
      int randomDivisions = (int) ((r.nextFloat() * 64) + 1);
      Color randomColor = new Color(r.nextDouble(), r.nextDouble(), r.nextDouble(), r.nextDouble());

      Spheroid sm =
          new Spheroid(randomDivisions, randomMajorRadius, randomMinorRadius, randomColor);
      sm.setDrawMode(DrawMode.LINE);
      double translationX = Math.random() * 1024 * 1.95;
      if (Math.random() >= 0.5) {
        translationX *= -1;
      }
      double translationY = Math.random() * 1024 * 1.95;
      if (Math.random() >= 0.5) {
        translationY *= -1;
      }
      double translationZ = Math.random() * 1024 * 1.95;
      if (Math.random() >= 0.5) {
        translationZ *= -1;
      }
      Translate translate = new Translate(translationX, translationY, translationZ);
      Rotate rotateX = new Rotate(Math.random() * 360, Rotate.X_AXIS);
      Rotate rotateY = new Rotate(Math.random() * 360, Rotate.Y_AXIS);
      Rotate rotateZ = new Rotate(Math.random() * 360, Rotate.Z_AXIS);

      sm.getTransforms().addAll(translate, rotateX, rotateY, rotateZ);

      spheroidGroup.getChildren().add(sm);
    }
    root.getChildren().add(spheroidGroup);

    System.out.println(spheroidGroup.getChildren().size());

    camera = new PerspectiveCamera(true);
    cameraTransform.setTranslate(0, 0, 0);
    cameraTransform.getChildren().addAll(camera);
    camera.setNearClip(0.1);
    camera.setFarClip(10000.0);
    camera.setFieldOfView(42);
    camera.setTranslateZ(cameraDistance);
    cameraTransform.ry.setAngle(-45.0);
    cameraTransform.rx.setAngle(-10.0);
    // add a Point Light for better viewing of the grid coordinate system
    PointLight light = new PointLight(Color.WHITE);

    cameraTransform.getChildren().add(light);
    light.setTranslateX(camera.getTranslateX());
    light.setTranslateY(camera.getTranslateY());
    light.setTranslateZ(camera.getTranslateZ());
    root.getChildren().add(cameraTransform);

    Scene scene = new Scene(new StackPane(root), 1024, 668, true, SceneAntialiasing.BALANCED);
    scene.setCamera(camera);
    scene.setFill(Color.BLACK);
    initFirstPersonControls(scene);

    stage.setTitle("Hello World!");
    stage.setScene(scene);
    stage.show();
  }
예제 #6
0
  @Override
  public void start(Stage primaryStage) throws Exception {
    Group sceneRoot = new Group();
    Scene scene = new Scene(sceneRoot, sceneWidth, sceneHeight, true, SceneAntialiasing.BALANCED);
    scene.setFill(Color.BLACK);
    camera = new PerspectiveCamera(true);

    // setup camera transform for rotational support
    cameraTransform.setTranslate(0, 0, 0);
    cameraTransform.getChildren().add(camera);
    camera.setNearClip(0.1);
    camera.setFarClip(10000.0);
    camera.setTranslateX(0);
    camera.setTranslateZ(-1000);
    cameraTransform.ry.setAngle(-25.0);
    cameraTransform.rx.setAngle(-10.0);
    // add a Point Light for better viewing of the grid coordinate system
    PointLight light = new PointLight(Color.WHITE);
    cameraTransform.getChildren().add(new AmbientLight());
    light.setTranslateX(camera.getTranslateX());
    light.setTranslateY(camera.getTranslateY());
    light.setTranslateZ(camera.getTranslateZ());
    scene.setCamera(camera);
    long time = System.currentTimeMillis();
    Group group = new Group(cameraTransform);
    List<Point3D> data = new ArrayList<>();

    //        // create some data
    //        IntStream.range(0,100000)
    //                .forEach(i->data.add(new Point3D((float)(30*Math.sin(50*i)),
    //                                    (float)(Math.sin(i)*(100+30*Math.cos(100*i))),
    //                                    (float)(Math.cos(i)*(100+30*Math.cos(200*i))),
    //                                    i))); // <-- f
    //        // and write to csv file
    //        Path out = Paths.get("output.txt");
    //
    // Files.write(out,data.stream().map(p3d->p3d.toCSV()).collect(Collectors.toList()),Charset.defaultCharset());

    // read from csv file
    Path out = getCSVFile(0);
    if (out != null) {
      Files.lines(out)
          .map(s -> s.split(";"))
          .forEach(
              s ->
                  data.add(
                      new Point3D(
                          Float.parseFloat(s[0]),
                          Float.parseFloat(s[1]),
                          Float.parseFloat(s[2]),
                          Float.parseFloat(s[3]))));
    }

    ScatterMesh scatter = new ScatterMesh(data, true, 1, 0);
    // DENSITY
    // texture is given by p.f value, don't change this!
    scatter.setTextureModeVertices3D(1530, p -> p.f);

    group.getChildren().add(scatter);
    sceneRoot.getChildren().addAll(group);

    // First person shooter keyboard movement
    scene.setOnKeyPressed(
        event -> {
          double change = 10.0;
          // Add shift modifier to simulate "Running Speed"
          if (event.isShiftDown()) {
            change = 50.0;
          }
          // What key did the user press?
          KeyCode keycode = event.getCode();
          // Step 2c: Add Zoom controls
          if (keycode == KeyCode.W) {
            camera.setTranslateZ(camera.getTranslateZ() + change);
          }
          if (keycode == KeyCode.S) {
            camera.setTranslateZ(camera.getTranslateZ() - change);
          }
          // Step 2d:  Add Strafe controls
          if (keycode == KeyCode.A) {
            camera.setTranslateX(camera.getTranslateX() - change);
          }
          if (keycode == KeyCode.D) {
            camera.setTranslateX(camera.getTranslateX() + change);
          }
        });

    scene.setOnMousePressed(
        (MouseEvent me) -> {
          mousePosX = me.getSceneX();
          mousePosY = me.getSceneY();
          mouseOldX = me.getSceneX();
          mouseOldY = me.getSceneY();
        });
    scene.setOnMouseDragged(
        (MouseEvent me) -> {
          mouseOldX = mousePosX;
          mouseOldY = mousePosY;
          mousePosX = me.getSceneX();
          mousePosY = me.getSceneY();
          mouseDeltaX = (mousePosX - mouseOldX);
          mouseDeltaY = (mousePosY - mouseOldY);

          double modifier = 10.0;
          double modifierFactor = 0.1;

          if (me.isControlDown()) {
            modifier = 0.1;
          }
          if (me.isShiftDown()) {
            modifier = 50.0;
          }
          if (me.isPrimaryButtonDown()) {
            cameraTransform.ry.setAngle(
                ((cameraTransform.ry.getAngle() + mouseDeltaX * modifierFactor * modifier * 2.0)
                                % 360
                            + 540)
                        % 360
                    - 180); // +
            cameraTransform.rx.setAngle(
                ((cameraTransform.rx.getAngle() - mouseDeltaY * modifierFactor * modifier * 2.0)
                                % 360
                            + 540)
                        % 360
                    - 180); // -
          } else if (me.isSecondaryButtonDown()) {
            double z = camera.getTranslateZ();
            double newZ = z + mouseDeltaX * modifierFactor * modifier;
            camera.setTranslateZ(newZ);
          } else if (me.isMiddleButtonDown()) {
            cameraTransform.t.setX(
                cameraTransform.t.getX() + mouseDeltaX * modifierFactor * modifier * 0.3); // -
            cameraTransform.t.setY(
                cameraTransform.t.getY() + mouseDeltaY * modifierFactor * modifier * 0.3); // -
          }
        });

    primaryStage.setTitle("F(X)yz - ScatterMesh Test");
    primaryStage.setScene(scene);
    primaryStage.show();

    final boolean constantVertices = true;
    lastEffect = System.nanoTime();
    AtomicInteger count = new AtomicInteger(0);

    List<List<Number>> fullData = new ArrayList<>();

    if (constantVertices) {
      // if possible we can cache all the data
      Stream.of(0, 1, 2, 3, 4, 3, 2, 1)
          .forEach(
              i -> {
                Path out2 = getCSVFile(i);
                if (out2 != null) {
                  try {
                    List<Number> data2 = new ArrayList<>();
                    Files.lines(out2)
                        .map(s -> s.split(";"))
                        .forEach(
                            s -> {
                              float f = Float.parseFloat(s[3]);
                              // 4 vertices tetrahedra
                              data2.add(f);
                              data2.add(f);
                              data2.add(f);
                              data2.add(f);
                            });
                    fullData.add(data2);
                  } catch (IOException ex) {
                  }
                }
              });
    }

    AnimationTimer timerEffect =
        new AnimationTimer() {

          @Override
          public void handle(long now) {
            if (now > lastEffect + 50_000_000l) {
              try {
                //                        long t=System.currentTimeMillis();
                if (constantVertices && fullData != null) {
                  // Vertices coordinates are always the same: mesh is tha same, we only
                  // need to update F on each element
                  scatter.setFunctionData(fullData.get(count.get() % 8));
                  //                            System.out.println("t
                  // "+(System.currentTimeMillis()-t));
                } else {
                  // vertices coordinates may change in time, we need to create them all over again
                  // reading the files:
                  Path out2 =
                      getCSVFile(
                          (int) (Stream.of(0, 1, 2, 3, 4, 3, 2, 1).toArray()[count.get() % 8]));
                  if (out2 != null) {
                    List<Point3D> data2 = new ArrayList<>();
                    Files.lines(out2)
                        .map(s -> s.split(";"))
                        .forEach(
                            s ->
                                data2.add(
                                    new Point3D(
                                        Float.parseFloat(s[0]),
                                        Float.parseFloat(s[1]),
                                        Float.parseFloat(s[2]),
                                        Float.parseFloat(s[3]))));
                    scatter.setScatterData(data2);
                    scatter.setTextureModeVertices1D(1530, p -> p);
                  }
                  //                            System.out.println("t
                  // "+(System.currentTimeMillis()-t));
                }
              } catch (IOException ex) {
              }

              count.getAndIncrement();
              lastEffect = now;
            }
          }
        };
    timerEffect.start();
  }
예제 #7
0
  @Override
  public void start(Stage primaryStage) throws Exception {
    Group sceneRoot = new Group();
    Scene scene = new Scene(sceneRoot, sceneWidth, sceneHeight, true, SceneAntialiasing.BALANCED);
    scene.setFill(Color.BLACK);
    camera = new PerspectiveCamera(true);
    camera.setNearClip(0.1);
    camera.setFarClip(10000.0);
    camera.setTranslateZ(-1000);
    scene.setCamera(camera);

    ArrayList<Point3D> points = new ArrayList<>();
    for (int i = -250; i < 250; i++) {
      points.add(
          new Point3D((float) i, (float) Math.sin(i) * 50 + i, (float) Math.cos(i) * 50 + i));
    }
    polyLine3D = new PolyLine3D(points, 3, Color.STEELBLUE);
    sceneRoot.getChildren().addAll(polyLine3D);

    scene.setOnKeyPressed(
        event -> {
          double change = 10.0;
          // Add shift modifier to simulate "Running Speed"
          if (event.isShiftDown()) {
            change = 50.0;
          }
          // What key did the user press?
          KeyCode keycode = event.getCode();
          // Step 2c: Add Zoom controls
          if (keycode == KeyCode.W) {
            camera.setTranslateZ(camera.getTranslateZ() + change);
          }
          if (keycode == KeyCode.S) {
            camera.setTranslateZ(camera.getTranslateZ() - change);
          }
          // Step 2d:  Add Strafe controls
          if (keycode == KeyCode.A) {
            camera.setTranslateX(camera.getTranslateX() - change);
          }
          if (keycode == KeyCode.D) {
            camera.setTranslateX(camera.getTranslateX() + change);
          }
        });

    // Add a Mouse Handler for Rotations
    Rotate xRotate = new Rotate(0, Rotate.X_AXIS);
    Rotate yRotate = new Rotate(0, Rotate.Y_AXIS);
    Rotate zRotate = new Rotate(0, Rotate.Z_AXIS);

    polyLine3D.getTransforms().addAll(xRotate, yRotate);
    // Use Binding so your rotation doesn't have to be recreated
    xRotate.angleProperty().bind(angleX);
    yRotate.angleProperty().bind(angleY);
    zRotate.angleProperty().bind(angleZ);

    // Start Tracking mouse movements only when a button is pressed
    scene.setOnMousePressed(
        event -> {
          scenex = event.getSceneX();
          sceney = event.getSceneY();
          fixedXAngle = angleX.get();
          fixedYAngle = angleY.get();
          if (event.isMiddleButtonDown()) {
            scenez = event.getSceneX();
            fixedZAngle = angleZ.get();
          }
        });
    // Angle calculation will only change when the button has been pressed
    scene.setOnMouseDragged(
        event -> {
          if (event.isMiddleButtonDown()) angleZ.set(fixedZAngle - (scenez - event.getSceneY()));
          else angleX.set(fixedXAngle - (scenex - event.getSceneY()));
          angleY.set(fixedYAngle + sceney - event.getSceneX());
        });

    primaryStage.setTitle("F(X)yz ScatterPlotTest");
    primaryStage.setScene(scene);
    primaryStage.show();
  }