Search in sources :

Example 1 with SpringMesh

use of org.fxyz.shapes.primitives.SpringMesh 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;
        if (event.isShiftDown()) {
            change = 50.0;
        }
        KeyCode keycode = event.getCode();
        if (keycode == KeyCode.W) {
            camera.setTranslateZ(camera.getTranslateZ() + change);
        }
        if (keycode == KeyCode.S) {
            camera.setTranslateZ(camera.getTranslateZ() - change);
        }
        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)

Aggregations

AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1 AnimationTimer (javafx.animation.AnimationTimer)1 Group (javafx.scene.Group)1 PerspectiveCamera (javafx.scene.PerspectiveCamera)1 PointLight (javafx.scene.PointLight)1 Scene (javafx.scene.Scene)1 KeyCode (javafx.scene.input.KeyCode)1 MouseEvent (javafx.scene.input.MouseEvent)1 Rotate (javafx.scene.transform.Rotate)1 SpringMesh (org.fxyz.shapes.primitives.SpringMesh)1 OBJWriter (org.fxyz.utils.OBJWriter)1