use of javafx.scene.AmbientLight in project FXyzLib by Birdasaur.
the class CSVScatter3DTest 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(0);
camera.setTranslateZ(-1000);
cameraTransform.ry.setAngle(-25.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(new AmbientLight());
light.setTranslateX(camera.getTranslateX());
light.setTranslateY(camera.getTranslateY());
light.setTranslateZ(camera.getTranslateZ());
scene.setCamera(camera);
long time = System.currentTimeMillis();
Group group = new Group(cameraTransform);
List<Point3D> data = new ArrayList<>();
// // create some data
// IntStream.range(0,100000)
// .forEach(i->data.add(new Point3D((float)(30*Math.sin(50*i)),
// (float)(Math.sin(i)*(100+30*Math.cos(100*i))),
// (float)(Math.cos(i)*(100+30*Math.cos(200*i))),
// i))); // <-- f
// // and write to csv file
// Path out = Paths.get("output.txt");
// Files.write(out,data.stream().map(p3d->p3d.toCSV()).collect(Collectors.toList()),Charset.defaultCharset());
// read from csv file
Path out = getCSVFile(0);
if (out != null) {
Files.lines(out).map(s -> s.split(";")).forEach(s -> data.add(new Point3D(Float.parseFloat(s[0]), Float.parseFloat(s[1]), Float.parseFloat(s[2]), Float.parseFloat(s[3]))));
}
ScatterMesh scatter = new ScatterMesh(data, true, 1, 0);
// DENSITY
// texture is given by p.f value, don't change this!
scatter.setTextureModeVertices3D(1530, p -> p.f);
group.getChildren().add(scatter);
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 - ScatterMesh Test");
primaryStage.setScene(scene);
primaryStage.show();
final boolean constantVertices = true;
lastEffect = System.nanoTime();
AtomicInteger count = new AtomicInteger(0);
List<List<Number>> fullData = new ArrayList<>();
if (constantVertices) {
// if possible we can cache all the data
Stream.of(0, 1, 2, 3, 4, 3, 2, 1).forEach(i -> {
Path out2 = getCSVFile(i);
if (out2 != null) {
try {
List<Number> data2 = new ArrayList<>();
Files.lines(out2).map(s -> s.split(";")).forEach(s -> {
float f = Float.parseFloat(s[3]);
data2.add(f);
data2.add(f);
data2.add(f);
data2.add(f);
});
fullData.add(data2);
} catch (IOException ex) {
}
}
});
}
AnimationTimer timerEffect = new AnimationTimer() {
@Override
public void handle(long now) {
if (now > lastEffect + 50_000_000l) {
try {
// long t=System.currentTimeMillis();
if (constantVertices && fullData != null) {
// Vertices coordinates are always the same: mesh is tha same, we only
// need to update F on each element
scatter.setFunctionData(fullData.get(count.get() % 8));
// System.out.println("t "+(System.currentTimeMillis()-t));
} else {
// vertices coordinates may change in time, we need to create them all over again reading the files:
Path out2 = getCSVFile((int) (Stream.of(0, 1, 2, 3, 4, 3, 2, 1).toArray()[count.get() % 8]));
if (out2 != null) {
List<Point3D> data2 = new ArrayList<>();
Files.lines(out2).map(s -> s.split(";")).forEach(s -> data2.add(new Point3D(Float.parseFloat(s[0]), Float.parseFloat(s[1]), Float.parseFloat(s[2]), Float.parseFloat(s[3]))));
scatter.setScatterData(data2);
scatter.setTextureModeVertices1D(1530, p -> p);
}
// System.out.println("t "+(System.currentTimeMillis()-t));
}
} catch (IOException ex) {
}
count.getAndIncrement();
lastEffect = now;
}
}
};
timerEffect.start();
}
use of javafx.scene.AmbientLight 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;
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.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();
}
use of javafx.scene.AmbientLight 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;
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 - 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));
});
// 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();
}
use of javafx.scene.AmbientLight 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;
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);
}
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();
}
use of javafx.scene.AmbientLight in project FXyzLib by Birdasaur.
the class Histogram method setHeightData.
public void setHeightData(float[][] arrayY, int barSize, int spacing, Color color, boolean ambient, boolean fill) {
histogramDataGroup.getChildren().clear();
PhongMaterial phong = new PhongMaterial();
phong.setSpecularColor(color);
phong.setDiffuseColor(color);
float min = arrayY[0][0], max = arrayY[0][0];
// Find min and max's for color gradient
for (int x = 0; x < arrayY.length; x++) {
for (int z = 0; z < arrayY[0].length; z++) {
if (arrayY[x][z] < min) {
min = arrayY[x][z];
}
if (arrayY[x][z] > max) {
max = arrayY[x][z];
}
}
}
//
float range = max - min;
// Generate Bars
for (int x = 0; x < arrayY.length; x++) {
for (int z = 0; z < arrayY[0].length; z++) {
double ySize = arrayY[x][z];
if (ySize < 0) {
ySize *= -1;
}
Node bar = createDefaultNode(barSize, ySize);
bar.setTranslateX(x * spacing);
bar.setTranslateY(-arrayY[x][z]);
bar.setTranslateZ(z * spacing);
//Apply normalized color scale
double normalizedColor = (arrayY[x][z] - min) / range;
if (//if it is in the lower half of the range
arrayY[x][z] < range / 2) {
phong = new PhongMaterial(new Color(0.25, 0, normalizedColor, 1));
} else //if it is in the upper half of the range
{
phong = new PhongMaterial(new Color(normalizedColor, 0, 0.25, 1));
}
switch(getDefaultNodeType()) {
case CYLINDER:
{
((Cylinder) bar).setMaterial(phong);
((Cylinder) bar).setCullFace(CullFace.BACK);
if (fill) {
((Cylinder) bar).setDrawMode(DrawMode.FILL);
} else {
//show lines only by default
((Cylinder) bar).setDrawMode(DrawMode.LINE);
}
break;
}
case CUBE:
default:
{
((Box) bar).setMaterial(phong);
((Box) bar).setCullFace(CullFace.BACK);
if (fill) {
((Box) bar).setDrawMode(DrawMode.FILL);
} else {
//show lines only by default
((Box) bar).setDrawMode(DrawMode.LINE);
}
}
}
if (ambient) {
AmbientLight light = new AmbientLight(color);
light.getScope().add(bar);
histogramDataGroup.getChildren().add(light);
}
histogramDataGroup.getChildren().add(bar);
}
}
}
Aggregations