Search in sources :

Example 1 with CameraView

use of org.fxyz.tools.CameraView in project FXyzLib by Birdasaur.

the class CameraViewTest method loadSubScene.

private void loadSubScene() throws NonInvertibleTransformException {
    camera = new PerspectiveCamera(true);
    cameraTransform.setTranslate(0, 0, -500);
    cameraTransform.getChildren().add(camera);
    camera.setNearClip(0.1);
    camera.setFarClip(10000.0);
    camera.setTranslateZ(-1500);
    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());
    worldRoot.getChildren().add(cameraTransform);
    SubScene scene = new SubScene(worldRoot, 800, 600, true, SceneAntialiasing.BALANCED);
    scene.setFill(Color.DARKSLATEGRAY);
    scene.setCamera(camera);
    // 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);
        }
    });
    root.getChildren().add(scene);
    scene.widthProperty().bind(root.widthProperty());
    scene.heightProperty().bind(root.heightProperty());
    cameraView = new CameraView(scene);
    cameraView.setFirstPersonNavigationEabled(true);
    cameraView.setFitWidth(350);
    cameraView.setFitHeight(225);
    cameraView.getRx().setAngle(-45);
    cameraView.getT().setZ(-1500);
    cameraView.getT().setY(-500);
    root.getChildren().add(cameraView);
    StackPane.setAlignment(cameraView, Pos.BOTTOM_RIGHT);
    StackPane.setMargin(cameraView, new Insets(5));
    // Add an aritrary object to scene
    int rDivs = 32, tDivs = 32;
    double rad = 600, trad = 400;
    TorusMesh torus = new TorusMesh(rDivs, tDivs, rad, trad);
    torus.setDrawMode(DrawMode.LINE);
    PhongMaterial mat = new PhongMaterial(Color.BLUEVIOLET);
    torus.setMaterial(mat);
    torus.setTranslateX(0);
    torus.setTranslateY(0);
    torus.setTranslateZ(0);
    worldRoot.getChildren().add(torus);
    final Timeline t = new Timeline();
    t.getKeyFrames().addAll(new KeyFrame[] { new KeyFrame(Duration.seconds(5), new KeyValue[] { // Frame End
    new KeyValue(torus.tubeStartAngleOffsetProperty(), torus.getTubeStartAngleOffset() - 10, Interpolator.EASE_BOTH), new KeyValue(torus.xOffsetProperty(), torus.getxOffset() + 0.5, Interpolator.EASE_BOTH), new KeyValue(torus.yOffsetProperty(), torus.getyOffset() + 0.5, Interpolator.EASE_BOTH), new KeyValue(torus.zOffsetProperty(), torus.getzOffset() + 2, Interpolator.EASE_BOTH), new KeyValue(torus.tubeDivisionsProperty(), 120, Interpolator.EASE_BOTH), new KeyValue(torus.radiusDivisionsProperty(), 120, Interpolator.EASE_BOTH), new KeyValue(torus.tubeRadiusProperty(), 400, Interpolator.EASE_BOTH) }) });
    t.setCycleCount(Animation.INDEFINITE);
    t.setAutoReverse(true);
    t.playFromStart();
}
Also used : MouseEvent(javafx.scene.input.MouseEvent) Insets(javafx.geometry.Insets) KeyValue(javafx.animation.KeyValue) PerspectiveCamera(javafx.scene.PerspectiveCamera) CameraView(org.fxyz.tools.CameraView) Timeline(javafx.animation.Timeline) SubScene(javafx.scene.SubScene) KeyFrame(javafx.animation.KeyFrame) KeyCode(javafx.scene.input.KeyCode) PointLight(javafx.scene.PointLight) PhongMaterial(javafx.scene.paint.PhongMaterial) TorusMesh(org.fxyz.shapes.primitives.TorusMesh)

Example 2 with CameraView

use of org.fxyz.tools.CameraView in project FXyzLib by Birdasaur.

the class BillBoardBehaviorTest method createCameraView.

private void createCameraView() {
    cameraView = new CameraView(subScene);
    cameraView.setFitWidth(400);
    cameraView.setFitHeight(300);
    cameraView.setFirstPersonNavigationEabled(true);
    cameraView.setFocusTraversable(true);
    cameraView.getCamera().setTranslateZ(-2500);
    cameraView.getCamera().setTranslateX(500);
    StackPane.setAlignment(cameraView, Pos.BOTTOM_RIGHT);
    StackPane.setMargin(cameraView, new Insets(10));
    rootPane.getChildren().add(cameraView);
    cameraView.startViewing();
}
Also used : Insets(javafx.geometry.Insets) CameraView(org.fxyz.tools.CameraView)

Aggregations

Insets (javafx.geometry.Insets)2 CameraView (org.fxyz.tools.CameraView)2 KeyFrame (javafx.animation.KeyFrame)1 KeyValue (javafx.animation.KeyValue)1 Timeline (javafx.animation.Timeline)1 PerspectiveCamera (javafx.scene.PerspectiveCamera)1 PointLight (javafx.scene.PointLight)1 SubScene (javafx.scene.SubScene)1 KeyCode (javafx.scene.input.KeyCode)1 MouseEvent (javafx.scene.input.MouseEvent)1 PhongMaterial (javafx.scene.paint.PhongMaterial)1 TorusMesh (org.fxyz.shapes.primitives.TorusMesh)1