Search in sources :

Example 1 with PhongMaterial

use of javafx.scene.paint.PhongMaterial in project FXyzLib by Birdasaur.

the class TriangleMeshHelper method getMaterialWithColor.

public Material getMaterialWithColor(Color color, String image) {
    PhongMaterial mat = new PhongMaterial(color);
    if (image != null && !image.isEmpty()) {
        Image img = new Image(image);
        mat.setDiffuseMap(img);
        NormalMap normal = new NormalMap(img);
        //            normal.setIntensity(10);
        //            normal.setIntensityScale(2);
        mat.setBumpMap(normal);
    }
    mat.setSpecularPower(32);
    mat.setSpecularColor(Color.WHITE);
    return mat;
}
Also used : NormalMap(org.fxyz.utils.NormalMap) PhongMaterial(javafx.scene.paint.PhongMaterial) Image(javafx.scene.image.Image)

Example 2 with PhongMaterial

use of javafx.scene.paint.PhongMaterial 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;
        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);
        }
    });
    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 3 with PhongMaterial

use of javafx.scene.paint.PhongMaterial in project FXyzLib by Birdasaur.

the class PrismTest 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.WHITESMOKE);
    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(-30);
    //        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(10 * camera.getTranslateZ());
    scene.setCamera(camera);
    rotateY = new Rotate(0, 0, 0, 0, Rotate.Y_AXIS);
    Group group = new Group();
    group.getChildren().add(cameraTransform);
    cylinder = new PrismMesh(2, 5, 4);
    //        cylinder = new PrismMesh(0.2,2,3); //,new Point3D(-5,5,0),new Point3D(0,0,5));
    //        cylinder.setDrawMode(DrawMode.LINE);
    // SECTION TYPE
    cylinder.setSectionType(TriangleMeshHelper.SectionType.TRIANGLE);
    // NONE
    //        cylinder.setTextureModeNone(Color.ROYALBLUE);
    // IMAGE
    //        cylinder.setTextureModeImage(getClass().getResource("res/netCylinder.png").toExternalForm());
    cylinder.setTextureModeVertices1D(6, t -> t);
    //        cylinder.setColorPalette(ColorPalette.GREEN);
    // DENSITY
    //        cylinder.setTextureModeVertices3D(1530,p->(double)p.magnitude());
    //        cylinder.setTextureModeVertices3D(1530,p->(double)cylinder.unTransform(p).magnitude());
    // FACES
    //        cylinder.setTextureModeFaces(1530);
    cylinder.getTransforms().addAll(new Rotate(0, Rotate.X_AXIS), rotateY);
    group.getChildren().add(cylinder);
    boolean showKnots = true;
    if (showKnots) {
        Sphere s = new Sphere(cylinder.getRadius() / 10d);
        Point3D k0 = cylinder.getAxisOrigin();
        s.getTransforms().add(new Translate(k0.x, k0.y, k0.z));
        s.setMaterial(new PhongMaterial(Color.GREENYELLOW));
        group.getChildren().add(s);
        s = new Sphere(cylinder.getRadius() / 10d);
        Point3D k3 = cylinder.getAxisEnd();
        s.getTransforms().add(new Translate(k3.x, k3.y, k3.z));
        s.setMaterial(new PhongMaterial(Color.ROSYBROWN));
        group.getChildren().add(s);
    }
    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);
        }
    });
    primaryStage.setTitle("F(X)yz - Cylinder Test");
    primaryStage.setScene(scene);
    primaryStage.show();
    //        OBJWriter writer=new OBJWriter((TriangleMesh) cylinder.getMesh(),"cylinder2");
    ////        writer.setMaterialColor(Color.AQUA);
    ////        writer.setTextureImage(getClass().getResource("res/netCylinder.png").toExternalForm());
    //        writer.setTextureColors(6,ColorPalette.GREEN);
    //        writer.exportMesh();
    lastEffect = System.nanoTime();
    AtomicInteger count = new AtomicInteger(0);
    AnimationTimer timerEffect = new AnimationTimer() {

        @Override
        public void handle(long now) {
            if (now > lastEffect + 100_000_000l) {
                //<=1/6d)?1d:0d;
                func = t -> Math.pow(Math.sin(8d * Math.PI * (10d * (1 - t.doubleValue()) + count.get() % 11) / 20d), 6);
                //                    cylinder.setFunction(func);
                //                    mapBez.values().forEach(b->b.setDensity(dens));
                count.getAndIncrement();
                lastEffect = now;
            }
        }
    };
//        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) Sphere(javafx.scene.shape.Sphere) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) PrismMesh(org.fxyz.shapes.primitives.PrismMesh) Point3D(org.fxyz.geometry.Point3D) KeyCode(javafx.scene.input.KeyCode) PointLight(javafx.scene.PointLight) PhongMaterial(javafx.scene.paint.PhongMaterial) Translate(javafx.scene.transform.Translate)

Example 4 with PhongMaterial

use of javafx.scene.paint.PhongMaterial in project FXyzLib by Birdasaur.

the class CubeViewer method buildAxes.

private void buildAxes(double size, double axisThickness) {
    // X-Axis Material
    final PhongMaterial redMaterial = new PhongMaterial();
    redMaterial.setDiffuseColor(Color.DARKRED);
    redMaterial.setSpecularColor(Color.RED);
    // Y-Axis Material
    final PhongMaterial greenMaterial = new PhongMaterial();
    greenMaterial.setDiffuseColor(Color.DARKGREEN);
    greenMaterial.setSpecularColor(Color.GREEN);
    // Z-Axis Material
    final PhongMaterial blueMaterial = new PhongMaterial();
    blueMaterial.setDiffuseColor(Color.DARKBLUE);
    blueMaterial.setSpecularColor(Color.BLUE);
    //XYZ 1
    final Cylinder x1AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder y1AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder z1AxisCyl = new Cylinder(axisThickness, size);
    x1AxisCyl.setTranslateY(size / 2);
    x1AxisCyl.setTranslateZ(-size / 2);
    y1AxisCyl.setTranslateX(-size / 2);
    y1AxisCyl.setTranslateZ(-size / 2);
    z1AxisCyl.setTranslateX((-size) / 2);
    z1AxisCyl.setTranslateY(size / 2);
    x1AxisCyl.setRotationAxis(Rotate.Z_AXIS);
    x1AxisCyl.setRotate(90);
    z1AxisCyl.setRotationAxis(Rotate.X_AXIS);
    z1AxisCyl.setRotate(-90);
    x1AxisCyl.setMaterial(redMaterial);
    y1AxisCyl.setMaterial(greenMaterial);
    z1AxisCyl.setMaterial(blueMaterial);
    //getChildren().addAll(x1AxisCyl, y1AxisCyl, z1AxisCyl);
    //XYZ 2
    final Cylinder x2AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder y2AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder z2AxisCyl = new Cylinder(axisThickness, size);
    x2AxisCyl.setTranslateY(size / 2);
    x2AxisCyl.setTranslateZ(size / 2);
    y2AxisCyl.setTranslateX(size / 2);
    y2AxisCyl.setTranslateZ(size / 2);
    z2AxisCyl.setTranslateX(size / 2);
    z2AxisCyl.setTranslateY(size / 2);
    x2AxisCyl.setRotationAxis(Rotate.Z_AXIS);
    x2AxisCyl.setRotate(90);
    z2AxisCyl.setRotationAxis(Rotate.X_AXIS);
    z2AxisCyl.setRotate(-90);
    x2AxisCyl.setMaterial(redMaterial);
    y2AxisCyl.setMaterial(greenMaterial);
    z2AxisCyl.setMaterial(blueMaterial);
    //getChildren().addAll(x2AxisCyl, y2AxisCyl, z2AxisCyl);
    //XYZ 3
    final Cylinder x3AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder y3AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder z3AxisCyl = new Cylinder(axisThickness, size);
    x3AxisCyl.setTranslateY(-size / 2);
    x3AxisCyl.setTranslateZ(-size / 2);
    y3AxisCyl.setTranslateX(size / 2);
    y3AxisCyl.setTranslateZ(-size / 2);
    z3AxisCyl.setTranslateX(size / 2);
    z3AxisCyl.setTranslateY(-size / 2);
    x3AxisCyl.setRotationAxis(Rotate.Z_AXIS);
    x3AxisCyl.setRotate(90);
    z3AxisCyl.setRotationAxis(Rotate.X_AXIS);
    z3AxisCyl.setRotate(-90);
    x3AxisCyl.setMaterial(redMaterial);
    y3AxisCyl.setMaterial(greenMaterial);
    z3AxisCyl.setMaterial(blueMaterial);
    //getChildren().addAll(x3AxisCyl, y3AxisCyl, z3AxisCyl);        
    //XYZ 4
    final Cylinder x4AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder y4AxisCyl = new Cylinder(axisThickness, size);
    final Cylinder z4AxisCyl = new Cylinder(axisThickness, size);
    x4AxisCyl.setTranslateY(-size / 2);
    x4AxisCyl.setTranslateZ(size / 2);
    y4AxisCyl.setTranslateX(-size / 2);
    y4AxisCyl.setTranslateZ(size / 2);
    z4AxisCyl.setTranslateX(-size / 2);
    z4AxisCyl.setTranslateY(-size / 2);
    x4AxisCyl.setRotationAxis(Rotate.Z_AXIS);
    x4AxisCyl.setRotate(90);
    z4AxisCyl.setRotationAxis(Rotate.X_AXIS);
    z4AxisCyl.setRotate(-90);
    x4AxisCyl.setMaterial(redMaterial);
    y4AxisCyl.setMaterial(greenMaterial);
    z4AxisCyl.setMaterial(blueMaterial);
    //getChildren().addAll(x4AxisCyl, y4AxisCyl, z4AxisCyl);        
    xAxesGroup.getChildren().addAll(x1AxisCyl, x2AxisCyl, x3AxisCyl, x4AxisCyl);
    yAxesGroup.getChildren().addAll(y1AxisCyl, y2AxisCyl, y3AxisCyl, y4AxisCyl);
    zAxesGroup.getChildren().addAll(z1AxisCyl, z2AxisCyl, z3AxisCyl, z4AxisCyl);
    getChildren().addAll(xAxesGroup, yAxesGroup, zAxesGroup);
    //fuck it throw a little sphere at the corners
    final Sphere top1Sphere = new Sphere(2 * axisThickness);
    final Sphere top2Sphere = new Sphere(2 * axisThickness);
    final Sphere top3Sphere = new Sphere(2 * axisThickness);
    final Sphere top4Sphere = new Sphere(2 * axisThickness);
    final Sphere bottom1Sphere = new Sphere(2 * axisThickness);
    final Sphere bottom2Sphere = new Sphere(2 * axisThickness);
    final Sphere bottom3Sphere = new Sphere(2 * axisThickness);
    final Sphere bottom4Sphere = new Sphere(2 * axisThickness);
    top1Sphere.setTranslateX(-size / 2);
    top1Sphere.setTranslateY(-size / 2);
    top1Sphere.setTranslateZ(-size / 2);
    top2Sphere.setTranslateX(-size / 2);
    top2Sphere.setTranslateY(-size / 2);
    top2Sphere.setTranslateZ(size / 2);
    top3Sphere.setTranslateX(size / 2);
    top3Sphere.setTranslateY(-size / 2);
    top3Sphere.setTranslateZ(size / 2);
    top4Sphere.setTranslateX(size / 2);
    top4Sphere.setTranslateY(-size / 2);
    top4Sphere.setTranslateZ(-size / 2);
    bottom1Sphere.setTranslateX(-size / 2);
    bottom1Sphere.setTranslateY(size / 2);
    bottom1Sphere.setTranslateZ(-size / 2);
    bottom2Sphere.setTranslateX(-size / 2);
    bottom2Sphere.setTranslateY(size / 2);
    bottom2Sphere.setTranslateZ(size / 2);
    bottom3Sphere.setTranslateX(size / 2);
    bottom3Sphere.setTranslateY(size / 2);
    bottom3Sphere.setTranslateZ(size / 2);
    bottom4Sphere.setTranslateX(size / 2);
    bottom4Sphere.setTranslateY(size / 2);
    bottom4Sphere.setTranslateZ(-size / 2);
    sphereGroup.getChildren().addAll(top1Sphere, top2Sphere, top3Sphere, top4Sphere, bottom1Sphere, bottom2Sphere, bottom3Sphere, bottom4Sphere);
    getChildren().add(sphereGroup);
}
Also used : Sphere(javafx.scene.shape.Sphere) Cylinder(javafx.scene.shape.Cylinder) PhongMaterial(javafx.scene.paint.PhongMaterial)

Example 5 with PhongMaterial

use of javafx.scene.paint.PhongMaterial in project FXyzLib by Birdasaur.

the class CubeWorld method buildGridsOld.

private void buildGridsOld(double size, double spacing) {
    //fill in grid lines for X Axis
    PhongMaterial phong = new PhongMaterial();
    phong.setSpecularColor(gridLinesWallColor);
    phong.setDiffuseColor(gridLinesWallColor);
    ArrayList xy1Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateX((-size / 2) + i);
        newCyl.setTranslateZ(-size / 2);
        xy1Cyls.add(newCyl);
    }
    xy1GridLinesGroup = new Group(xy1Cyls);
    //Now build the grids for the mirror image
    ArrayList xy2Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateX((-size / 2) + i);
        newCyl.setTranslateZ(size / 2);
        xy2Cyls.add(newCyl);
    }
    xy2GridLinesGroup = new Group(xy2Cyls);
    ArrayList xx1Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateZ(-size / 2);
        newCyl.setTranslateY((size / 2) - i);
        newCyl.setRotationAxis(Rotate.Z_AXIS);
        newCyl.setRotate(90);
        xx1Cyls.add(newCyl);
    }
    xx1GridLinesGroup = new Group(xx1Cyls);
    //Now build the grids for the mirror image
    ArrayList xx2Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateZ(size / 2);
        newCyl.setTranslateY((size / 2) - i);
        newCyl.setRotationAxis(Rotate.Z_AXIS);
        newCyl.setRotate(90);
        xx2Cyls.add(newCyl);
    }
    xx2GridLinesGroup = new Group(xx2Cyls);
    //Add the sub groups to the parent group 
    getChildren().addAll(xy1GridLinesGroup);
    getChildren().addAll(xx1GridLinesGroup);
    getChildren().addAll(xy2GridLinesGroup);
    getChildren().addAll(xx2GridLinesGroup);
    // File in grid Lines for Y Axis //////////////////////////
    ArrayList yy1Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateX(-size / 2);
        newCyl.setTranslateZ((-size / 2) + i);
        yy1Cyls.add(newCyl);
    }
    yy1GridLinesGroup = new Group(yy1Cyls);
    //Now build the grids for the mirror image
    ArrayList yy2Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateX(size / 2);
        newCyl.setTranslateZ((-size / 2) + i);
        yy2Cyls.add(newCyl);
    }
    yy2GridLinesGroup = new Group(yy2Cyls);
    ArrayList yx1Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateX(-size / 2);
        newCyl.setTranslateY((size / 2) - i);
        newCyl.setRotationAxis(Rotate.X_AXIS);
        newCyl.setRotate(90);
        yx1Cyls.add(newCyl);
    }
    yx1GridLinesGroup = new Group(yx1Cyls);
    //Now build the grids for the mirror image
    ArrayList yx2Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateX(size / 2);
        newCyl.setTranslateY((size / 2) - i);
        newCyl.setRotationAxis(Rotate.X_AXIS);
        newCyl.setRotate(90);
        yx2Cyls.add(newCyl);
    }
    yx2GridLinesGroup = new Group(yx2Cyls);
    //Add the sub groups to the parent group
    getChildren().addAll(yy1GridLinesGroup);
    getChildren().addAll(yx1GridLinesGroup);
    getChildren().addAll(yy2GridLinesGroup);
    getChildren().addAll(yx2GridLinesGroup);
    // File in grid Lines for Z Axis //////////////////////////
    phong = new PhongMaterial();
    phong.setSpecularColor(gridLinesFloorColor);
    phong.setDiffuseColor(gridLinesFloorColor);
    ArrayList zy1Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateY(size / 2);
        newCyl.setTranslateX((-size / 2) + i);
        newCyl.setRotationAxis(Rotate.X_AXIS);
        newCyl.setRotate(90);
        zy1Cyls.add(newCyl);
    }
    zy1GridLinesGroup = new Group(zy1Cyls);
    //Now build the grids for the mirror image
    ArrayList zy2Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateY(-size / 2);
        newCyl.setTranslateX((-size / 2) + i);
        newCyl.setRotationAxis(Rotate.X_AXIS);
        newCyl.setRotate(90);
        zy2Cyls.add(newCyl);
    }
    zy2GridLinesGroup = new Group(zy2Cyls);
    ArrayList zx1Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateY(size / 2);
        newCyl.setTranslateZ((-size / 2) + i);
        newCyl.setRotationAxis(Rotate.Z_AXIS);
        newCyl.setRotate(90);
        zx1Cyls.add(newCyl);
    }
    zx1GridLinesGroup = new Group(zx1Cyls);
    //Now build the grids for the mirror image
    ArrayList zx2Cyls = new ArrayList<>();
    for (int i = 0; i < size; i += spacing) {
        Cylinder newCyl = new Cylinder(gridSize, size);
        newCyl.setMaterial(phong);
        newCyl.setTranslateY(-size / 2);
        newCyl.setTranslateZ((-size / 2) + i);
        newCyl.setRotationAxis(Rotate.Z_AXIS);
        newCyl.setRotate(90);
        zx2Cyls.add(newCyl);
    }
    zx2GridLinesGroup = new Group(zx2Cyls);
    //Add the sub groups to the parent group
    getChildren().addAll(zy1GridLinesGroup);
    getChildren().addAll(zx1GridLinesGroup);
    getChildren().addAll(zy2GridLinesGroup);
    getChildren().addAll(zx2GridLinesGroup);
}
Also used : Cylinder(javafx.scene.shape.Cylinder) Group(javafx.scene.Group) ArrayList(java.util.ArrayList) PhongMaterial(javafx.scene.paint.PhongMaterial)

Aggregations

PhongMaterial (javafx.scene.paint.PhongMaterial)14 Group (javafx.scene.Group)7 PerspectiveCamera (javafx.scene.PerspectiveCamera)6 PointLight (javafx.scene.PointLight)6 KeyCode (javafx.scene.input.KeyCode)6 MouseEvent (javafx.scene.input.MouseEvent)6 Sphere (javafx.scene.shape.Sphere)6 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)5 Scene (javafx.scene.Scene)5 Cylinder (javafx.scene.shape.Cylinder)5 Rotate (javafx.scene.transform.Rotate)5 Translate (javafx.scene.transform.Translate)5 Point3D (org.fxyz.geometry.Point3D)5 ArrayList (java.util.ArrayList)3 AnimationTimer (javafx.animation.AnimationTimer)3 AmbientLight (javafx.scene.AmbientLight)3 Bounds (javafx.geometry.Bounds)2 Color (javafx.scene.paint.Color)2 Box (javafx.scene.shape.Box)2 MeshView (javafx.scene.shape.MeshView)2