Search in sources :

Example 26 with AnimationTimer

use of javafx.animation.AnimationTimer in project FXyzLib by Birdasaur.

the class SegmentedSphereTest method start.

@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(100000.0);
    camera.setTranslateZ(-0);
    camera.setFieldOfView(100);
    cameraTransform.ry.setAngle(-45.0);
    cameraTransform.rx.setAngle(-30.0);
    // add a Point Light for better viewing of the grid coordinate system
    PointLight light = new PointLight(Color.WHITE);
    // cameraTransform.getChildren().add(light);
    cameraTransform.getChildren().add(new AmbientLight(Color.WHITE));
    light.setTranslateX(0);
    light.setTranslateY(0);
    light.setTranslateZ(-1000);
    scene.setCamera(camera);
    rotateY = new Rotate(0, 0, 0, 0, Rotate.Y_AXIS);
    Group group = new Group();
    group.getChildren().add(cameraTransform);
    // torus = new SegmentedSphereMesh(100, 0, 10, 2000d, new Point3D(20f,4f,-2f));
    sphere = new SegmentedSphereMesh(200, 0, 0, 100, new Point3D(0f, 0f, 0f));
    // torus.setDrawMode(DrawMode.LINE);
    // torus.setCullFace(CullFace.NONE);
    // NONE
    // torus.setTextureModeNone(Color.FORESTGREEN);
    // IMAGE
    // torus.setTextureModeImage(getClass().getResource("res/share-carousel_In.png").toExternalForm());
    // PATTERN
    // torus.setTextureModePattern(20.0d);
    // DENSITY
    sphere.setTextureModeVertices3D(2, dens);
    // FACES
    // torus.setTextureModeFaces(256*256);
    sphere.getTransforms().addAll(new Rotate(0, Rotate.X_AXIS), rotateY);
    // banner.getTransforms().addAll(new Rotate(0,Rotate.X_AXIS),rotateY);
    // ,banner);
    group.getChildren().addAll(sphere);
    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);
        }
        if (keycode == KeyCode.L) {
            camera.setTranslateY(camera.getTranslateY() - change);
        }
        if (keycode == KeyCode.R) {
            camera.setTranslateY(camera.getTranslateY() + 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);
        }
    });
    lastEffect = System.nanoTime();
    AtomicInteger count = new AtomicInteger();
    AnimationTimer timerEffect = new AnimationTimer() {

        @Override
        public void handle(long now) {
            if (now > lastEffect + 1_000_000_000l) {
                // dens = p->(float)(p.x*Math.cos(count.get()%100d*2d*Math.PI/50d)+p.y*Math.sin(count.get()%100d*2d*Math.PI/50d));
                // torus.setDensity(dens);
                // if(count.get()%100<50){
                // torus.setDrawMode(DrawMode.LINE);
                // } else {
                // torus.setDrawMode(DrawMode.FILL);
                // }
                // spring.setLength(100+20*(count.get()%10));
                // torus.setColors((int)Math.pow(2,count.get()%16));
                // torus.setMajorRadius(500+100*(count.get()%10));
                // torus.setRadius(150+10*(count.get()%10));
                // torus.setPatternScale(1d+(count.get()%10)*5d);
                count.getAndIncrement();
                lastEffect = now;
            }
        }
    };
    primaryStage.setTitle("F(X)yz - Segmented Sphere");
    primaryStage.setScene(scene);
    primaryStage.show();
    // timerEffect.start();
    final Timeline bannerEffect = new Timeline();
    bannerEffect.setCycleCount(Timeline.INDEFINITE);
    final KeyValue kv1 = new KeyValue(cameraTransform.ry.angleProperty(), 360);
    final KeyFrame kf1 = new KeyFrame(Duration.millis(20000), kv1);
    bannerEffect.getKeyFrames().addAll(kf1);
// bannerEffect.play();
}
Also used : Group(javafx.scene.Group) MouseEvent(javafx.scene.input.MouseEvent) KeyValue(javafx.animation.KeyValue) Rotate(javafx.scene.transform.Rotate) AnimationTimer(javafx.animation.AnimationTimer) PerspectiveCamera(javafx.scene.PerspectiveCamera) Scene(javafx.scene.Scene) Timeline(javafx.animation.Timeline) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Point3D(org.fxyz.geometry.Point3D) SegmentedSphereMesh(org.fxyz.shapes.primitives.SegmentedSphereMesh) KeyFrame(javafx.animation.KeyFrame) KeyCode(javafx.scene.input.KeyCode) PointLight(javafx.scene.PointLight) AmbientLight(javafx.scene.AmbientLight)

Example 27 with AnimationTimer

use of javafx.animation.AnimationTimer in project FXyzLib by Birdasaur.

the class CurvedSpringTest method start.

@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.WHITE);
    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.setTranslateZ(-60);
    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);
    cameraTransform.getChildren().add(new AmbientLight(Color.WHITE));
    light.setTranslateX(camera.getTranslateX());
    light.setTranslateY(camera.getTranslateY());
    light.setTranslateZ(camera.getTranslateZ());
    scene.setCamera(camera);
    rotateY = new Rotate(0, 0, 0, 0, Rotate.Y_AXIS);
    Group group = new Group();
    group.getChildren().add(cameraTransform);
    spring = new CurvedSpringMesh(6d, 2d, 0.4d, 25d, 12.5d * 2d * Math.PI, 1000, 60, 0, 0);
    spring.setSectionType(SectionType.TRIANGLE);
    spring.setCullFace(CullFace.NONE);
    // spring.setDrawMode(DrawMode.LINE);
    // NONE
    spring.setTextureModeNone(Color.ROYALBLUE);
    // IMAGE
    // spring.setTextureModeImage(getClass().getResource("res/LaminateSteel.jpg").toExternalForm());
    // PATTERN
    // spring.setTextureModePattern(10d);
    // FUNCTION
    // spring.setTextureModeVertices1D(256*256,t->t);
    // DENSITY
    // spring.setTextureModeVertices3D(256*256,dens);
    // FACES
    // spring.setTextureModeFaces(256*256);
    spring.getTransforms().addAll(new Rotate(0, Rotate.X_AXIS), rotateY);
    group.getChildren().add(spring);
    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);
        }
    });
    lastEffect = System.nanoTime();
    AtomicInteger count = new AtomicInteger();
    AnimationTimer timerEffect = new AnimationTimer() {

        @Override
        public void handle(long now) {
            if (now > lastEffect + 500_000_000l) {
                // dens = p->(float)(p.x*Math.cos(count.get()%100d*2d*Math.PI/50d)+p.y*Math.sin(count.get()%100d*2d*Math.PI/50d));
                // spring.setDensity(dens);
                // spring.setPitch(20+5*(count.get()%10));
                // if(count.get()%100<50){
                // spring.setDrawMode(DrawMode.LINE);
                // } else {
                // spring.setDrawMode(DrawMode.FILL);
                // }
                // spring.setLength(100+20*(count.get()%10));
                // spring.setColors((int)Math.pow(2,count.get()%16));
                // spring.setMajorRadius(5d+(count.get()%10));
                // spring.setMinorRadius(1d+(count.get()%10)/4d);
                // spring.setWireRadius(0.1d+(count.get()%6)/10d);
                // spring.setPatternScale(1d+(count.get()%10)*5d);
                // spring.setFunction(t->Math.sin((25+count.get()%25)*t));
                count.getAndIncrement();
                lastEffect = now;
            }
        }
    };
    primaryStage.setTitle("F(X)yz - Spring");
    primaryStage.setScene(scene);
    primaryStage.show();
    OBJWriter writer = new OBJWriter((TriangleMesh) spring.getMesh(), "curvedSpring");
    // writer.setTextureColors(256*256);
    writer.setMaterialColor(Color.ROYALBLUE);
    writer.exportMesh();
// timerEffect.start();
}
Also used : Group(javafx.scene.Group) MouseEvent(javafx.scene.input.MouseEvent) Rotate(javafx.scene.transform.Rotate) AnimationTimer(javafx.animation.AnimationTimer) PerspectiveCamera(javafx.scene.PerspectiveCamera) Scene(javafx.scene.Scene) CurvedSpringMesh(org.fxyz.shapes.primitives.CurvedSpringMesh) OBJWriter(org.fxyz.utils.OBJWriter) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) KeyCode(javafx.scene.input.KeyCode) PointLight(javafx.scene.PointLight) AmbientLight(javafx.scene.AmbientLight)

Example 28 with AnimationTimer

use of javafx.animation.AnimationTimer in project FXyzLib by Birdasaur.

the class Text3DTest method start.

@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(800);
    camera.setTranslateZ(-3000);
    // cameraTransform.ry.setAngle(-25.0);
    cameraTransform.rx.setAngle(10.0);
    // add a Point Light for better viewing of the grid coordinate system
    // PointLight light1 = new PointLight(Color.WHITE);
    cameraTransform.getChildren().add(new AmbientLight());
    scene.setCamera(camera);
    Group group = new Group(cameraTransform);
    Text3DMesh letters = new Text3DMesh("3DMesh", "Gadugi Bold", 400, true, 120, 0, 1);
    // letters.setDrawMode(DrawMode.LINE);
    // NONE
    // letters.setTextureModeNone(Color.ROYALBLUE);
    // IMAGE
    // letters.setTextureModeImage(getClass().getResource("res/steel-background1.jpg").toExternalForm());
    // letters.setTextureModeImage(getClass().getResource("res/marvel1.jpg").toExternalForm());
    // DENSITY
    letters.setTextureModeVertices3D(1530, p -> p.magnitude());
    // letters.setTextureModeVertices3D(1530,p->Math.sin(p.y/50)*Math.cos(p.x/40)*p.z);
    // FACES
    // letters.setTextureModeFaces(Palette.ColorPalette.HSB,16);
    group.getChildren().add(letters);
    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 - Text3D");
    primaryStage.setScene(scene);
    primaryStage.show();
    // Letter transformations
    IntStream.range(0, letters.getChildren().size()).forEach(i -> {
        double y = (((double) i) / ((double) letters.getChildren().size()) * 3d * Math.PI);
        ((TexturedMesh) (letters.getChildren().get(i))).getTranslate().setY(100d * Math.sin(y));
    // ((TexturedMesh)(letters.getChildren().get(i))).getRotateZ().setAngle(Math.cos(y)*180d/Math.PI);
    // ((TexturedMesh)(letters.getChildren().get(i))).getRotateX().setAngle(Math.cos(y)*180d/Math.PI);
    });
    // Letter animations
    final Timeline rotateEffect1 = new Timeline();
    rotateEffect1.setCycleCount(Timeline.INDEFINITE);
    TexturedMesh t0 = letters.getMeshFromLetter("M");
    final KeyValue kv1 = new KeyValue(t0.getRotateY().angleProperty(), 360);
    final KeyFrame kf1 = new KeyFrame(Duration.millis(3000), kv1);
    rotateEffect1.getKeyFrames().addAll(kf1);
    rotateEffect1.play();
    final Timeline rotateEffect2 = new Timeline();
    TexturedMesh t1 = letters.getMeshFromLetter("3");
    final KeyValue kv2 = new KeyValue(t1.getRotateX().angleProperty(), 360);
    final KeyFrame kf2 = new KeyFrame(Duration.millis(2000), kv2);
    rotateEffect2.getKeyFrames().addAll(kf2);
    rotateEffect2.play();
    // 
    final Timeline rotateEffect3 = new Timeline();
    rotateEffect3.setCycleCount(Timeline.INDEFINITE);
    TexturedMesh t5 = letters.getMeshFromLetter("h");
    final KeyValue kv1x = new KeyValue(t5.getScale().xProperty(), 1.2, Interpolator.EASE_BOTH);
    final KeyValue kv1y = new KeyValue(t5.getScale().yProperty(), 1.2, Interpolator.EASE_BOTH);
    final KeyValue kv1z = new KeyValue(t5.getScale().zProperty(), 1.2, Interpolator.EASE_BOTH);
    final KeyFrame kfs1 = new KeyFrame(Duration.millis(500), kv1x, kv1y, kv1z);
    final KeyValue kv2x = new KeyValue(t5.getScale().xProperty(), 0.3, Interpolator.EASE_BOTH);
    final KeyValue kv2y = new KeyValue(t5.getScale().yProperty(), 0.3, Interpolator.EASE_BOTH);
    final KeyValue kv2z = new KeyValue(t5.getScale().zProperty(), 0.3, Interpolator.EASE_BOTH);
    final KeyFrame kfs2 = new KeyFrame(Duration.millis(2000), kv2x, kv2y, kv2z);
    final KeyValue kv3x = new KeyValue(t5.getScale().xProperty(), 1, Interpolator.EASE_BOTH);
    final KeyValue kv3y = new KeyValue(t5.getScale().yProperty(), 1, Interpolator.EASE_BOTH);
    final KeyValue kv3z = new KeyValue(t5.getScale().zProperty(), 1, Interpolator.EASE_BOTH);
    final KeyFrame kfs3 = new KeyFrame(Duration.millis(3000), kv3x, kv3y, kv3z);
    rotateEffect3.getKeyFrames().addAll(kfs1, kfs2, kfs3);
    rotateEffect3.play();
    lastEffect = System.nanoTime();
    AtomicInteger count = new AtomicInteger(1);
    AnimationTimer timerEffect = new AnimationTimer() {

        @Override
        public void handle(long now) {
            if (now > lastEffect + 1_000_000_000l) {
                System.out.println("*** " + count.get());
                letters.setFont(Font.getFontNames().get(count.get() % Font.getFontNames().size()));
                if (count.get() % 10 < 2) {
                    letters.setTextureModeNone(Color.hsb(count.get() % 360, 1, 1));
                } else if (count.get() % 10 < 4) {
                    letters.setTextureModeImage(getClass().getResource("res/steel-background1.jpg").toExternalForm());
                } else if (count.get() % 10 < 8) {
                    letters.setTextureModeVertices3D(1530, p -> (double) (p.y / (20 + count.get() % 20)) * (p.x / (10 + count.get() % 10)));
                } else {
                    letters.setTextureModeFaces(1530);
                }
                if (count.get() % 20 > 15) {
                    letters.setDrawMode(DrawMode.LINE);
                } else {
                    letters.setDrawMode(DrawMode.FILL);
                }
                letters.getChildren().forEach(m -> ((TexturedMesh) m).setDensity(p -> p.magnitude() * Math.cos(p.y / 100d * (count.get() % 5))));
                count.getAndIncrement();
                lastEffect = now;
            }
        }
    };
    // timerEffect.start();
    OBJWriter writer = new OBJWriter((TriangleMesh) ((TexturedMesh) (letters.getChildren().get(0))).getMesh(), "letter");
    writer.setTextureColors(6);
    // writer.setTexturePattern();
    // writer.setTextureImage(getClass().getResource("res/LaminateSteel.jpg").toExternalForm());
    writer.exportMesh();
}
Also used : IntStream(java.util.stream.IntStream) Scene(javafx.scene.Scene) Arrays(java.util.Arrays) Palette(org.fxyz.utils.Palette) MouseEvent(javafx.scene.input.MouseEvent) PointLight(javafx.scene.PointLight) VBox(javafx.scene.layout.VBox) Function(java.util.function.Function) TriangleMesh(javafx.scene.shape.TriangleMesh) ArrayList(java.util.ArrayList) Application(javafx.application.Application) PerspectiveCamera(javafx.scene.PerspectiveCamera) CameraTransformer(org.fxyz.cameras.CameraTransformer) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) TexturedMesh(org.fxyz.shapes.primitives.TexturedMesh) ColorPalette(org.fxyz.utils.Palette.ColorPalette) Patterns(org.fxyz.utils.Patterns) KeyValue(javafx.animation.KeyValue) KeyCode(javafx.scene.input.KeyCode) Color(javafx.scene.paint.Color) KeyFrame(javafx.animation.KeyFrame) CuboidMesh(org.fxyz.shapes.primitives.CuboidMesh) Text3DMesh(org.fxyz.shapes.primitives.Text3DMesh) Font(javafx.scene.text.Font) Timeline(javafx.animation.Timeline) Group(javafx.scene.Group) DrawMode(javafx.scene.shape.DrawMode) AnimationTimer(javafx.animation.AnimationTimer) List(java.util.List) Duration(javafx.util.Duration) OBJWriter(org.fxyz.utils.OBJWriter) Interpolator(javafx.animation.Interpolator) Stage(javafx.stage.Stage) SceneAntialiasing(javafx.scene.SceneAntialiasing) TriangulatedMesh(org.fxyz.shapes.primitives.TriangulatedMesh) Point3D(org.fxyz.geometry.Point3D) Bounds(javafx.geometry.Bounds) AmbientLight(javafx.scene.AmbientLight) Group(javafx.scene.Group) MouseEvent(javafx.scene.input.MouseEvent) KeyValue(javafx.animation.KeyValue) AnimationTimer(javafx.animation.AnimationTimer) Text3DMesh(org.fxyz.shapes.primitives.Text3DMesh) PerspectiveCamera(javafx.scene.PerspectiveCamera) Scene(javafx.scene.Scene) OBJWriter(org.fxyz.utils.OBJWriter) Timeline(javafx.animation.Timeline) TexturedMesh(org.fxyz.shapes.primitives.TexturedMesh) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) KeyFrame(javafx.animation.KeyFrame) KeyCode(javafx.scene.input.KeyCode) AmbientLight(javafx.scene.AmbientLight)

Example 29 with AnimationTimer

use of javafx.animation.AnimationTimer in project FXyzLib by Birdasaur.

the class SpringTest method start.

@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.setTranslateZ(-100);
    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);
    // cameraTransform.getChildren().add(new AmbientLight(Color.WHITE));
    light.setTranslateX(camera.getTranslateX());
    light.setTranslateY(camera.getTranslateY());
    light.setTranslateZ(camera.getTranslateZ());
    scene.setCamera(camera);
    rotateY = new Rotate(0, 0, 0, 0, Rotate.Y_AXIS);
    Group group = new Group();
    group.getChildren().add(cameraTransform);
    spring = new SpringMesh(5d, 1d, 2d, 4 * 2d * Math.PI, 303, 54, 0, 0);
    // spring.setDrawMode(DrawMode.LINE);
    // spring.setCullFace(CullFace.NONE);
    // spring.setSectionType(SectionType.TRIANGLE);
    // // NONE
    spring.setTextureModeNone(Color.web("#4169E180"));
    // IMAGE
    // spring.setTextureModeImage(getClass().getResource("res/LaminateSteel.jpg").toExternalForm());
    // PATTERN
    // spring.setTextureModePattern(5d);
    // FUNCTION
    // spring.setTextureModeVertices1D(256*256,t->t);
    // DENSITY
    spring.setTextureModeVertices3D(1530, dens);
    // FACES
    // spring.setTextureModeFaces(256*256);
    spring.getTransforms().addAll(new Rotate(0, Rotate.X_AXIS), rotateY);
    group.getChildren().add(spring);
    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);
        }
    });
    lastEffect = System.nanoTime();
    AtomicInteger count = new AtomicInteger();
    AnimationTimer timerEffect = new AnimationTimer() {

        @Override
        public void handle(long now) {
            if (now > lastEffect + 500_000_000l) {
                // dens = p->(float)(p.x*Math.cos(count.get()%100d*2d*Math.PI/50d)+p.y*Math.sin(count.get()%100d*2d*Math.PI/50d));
                // spring.setDensity(dens);
                spring.setPitch(20 + 5 * (count.get() % 10));
                // if(count.get()%100<50){
                // spring.setDrawMode(DrawMode.LINE);
                // } else {
                // spring.setDrawMode(DrawMode.FILL);
                // }
                // spring.setLength(100+20*(count.get()%10));
                // spring.setPatternScale(1d+(count.get()%10)*2d);
                // spring.setSectionType(SectionType.values()[count.get()%SectionType.values().length]);
                // spring.setColors((int)Math.pow(2,count.get()%16));
                // spring.setMeanRadius(50+10*(count.get()%10));
                count.getAndIncrement();
                lastEffect = now;
            }
        }
    };
    primaryStage.setTitle("F(X)yz - Spring");
    primaryStage.setScene(scene);
    primaryStage.show();
    OBJWriter writer = new OBJWriter((TriangleMesh) spring.getMesh(), "spring");
    // writer.setMaterialColor(Color.BROWN);
    writer.setTextureColors(256 * 256);
    writer.exportMesh();
// timerEffect.start();
}
Also used : Group(javafx.scene.Group) SpringMesh(org.fxyz.shapes.primitives.SpringMesh) MouseEvent(javafx.scene.input.MouseEvent) Rotate(javafx.scene.transform.Rotate) AnimationTimer(javafx.animation.AnimationTimer) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) KeyCode(javafx.scene.input.KeyCode) PerspectiveCamera(javafx.scene.PerspectiveCamera) Scene(javafx.scene.Scene) PointLight(javafx.scene.PointLight) OBJWriter(org.fxyz.utils.OBJWriter)

Example 30 with AnimationTimer

use of javafx.animation.AnimationTimer in project selenium_java by sergueik.

the class QueueApplicationEx method start.

@Override
public void start(Stage primaryStage) {
    final BlockingQueue<String> messageQueue = new ArrayBlockingQueue<>(1);
    TextArea console = new TextArea();
    Button startButton = new Button("Start");
    startButton.setOnAction(event -> {
        MessageProducer producer = new MessageProducer(messageQueue);
        Thread t = new Thread(producer);
        t.setDaemon(true);
        t.start();
    });
    final LongProperty lastUpdate = new SimpleLongProperty();
    // nanoseconds. Set to higher number to
    final long minUpdateInterval = 0;
    // slow output.
    AnimationTimer timer = new AnimationTimer() {

        @Override
        public void handle(long now) {
            if (now - lastUpdate.get() > minUpdateInterval) {
                final String message = messageQueue.poll();
                if (message != null) {
                    console.appendText("\n" + message);
                }
                lastUpdate.set(now);
            }
        }
    };
    timer.start();
    HBox controls = new HBox(5, startButton);
    controls.setPadding(new Insets(10));
    controls.setAlignment(Pos.CENTER);
    BorderPane root = new BorderPane(console, null, null, controls, null);
    Scene scene = new Scene(root, 600, 400);
    primaryStage.setScene(scene);
    primaryStage.show();
}
Also used : HBox(javafx.scene.layout.HBox) BorderPane(javafx.scene.layout.BorderPane) Insets(javafx.geometry.Insets) AnimationTimer(javafx.animation.AnimationTimer) TextArea(javafx.scene.control.TextArea) Scene(javafx.scene.Scene) ArrayBlockingQueue(java.util.concurrent.ArrayBlockingQueue) Button(javafx.scene.control.Button) LongProperty(javafx.beans.property.LongProperty) SimpleLongProperty(javafx.beans.property.SimpleLongProperty) SimpleLongProperty(javafx.beans.property.SimpleLongProperty)

Aggregations

AnimationTimer (javafx.animation.AnimationTimer)53 Scene (javafx.scene.Scene)18 Group (javafx.scene.Group)15 PerspectiveCamera (javafx.scene.PerspectiveCamera)15 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)14 KeyCode (javafx.scene.input.KeyCode)14 MouseEvent (javafx.scene.input.MouseEvent)14 PointLight (javafx.scene.PointLight)13 Rotate (javafx.scene.transform.Rotate)11 Point3D (org.fxyz.geometry.Point3D)8 Section (eu.hansolo.enzo.common.Section)7 AmbientLight (javafx.scene.AmbientLight)7 Color (javafx.scene.paint.Color)7 ArrayList (java.util.ArrayList)6 KeyFrame (javafx.animation.KeyFrame)5 KeyValue (javafx.animation.KeyValue)5 Timeline (javafx.animation.Timeline)5 Stage (javafx.stage.Stage)5 OBJWriter (org.fxyz.utils.OBJWriter)5 Random (java.util.Random)4