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;
}
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();
}
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();
}
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);
}
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);
}
Aggregations