use of javafx.animation.AnimationTimer in project FXyzLib by Birdasaur.
the class KnotTest 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.WHEAT);
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);
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);
knot = new KnotMesh(2d, 1d, 0.4d, 2d, 3d, 1000, 60, 0, 0);
knot.setDrawMode(DrawMode.LINE);
// knot.setCullFace(CullFace.NONE);
knot.setSectionType(SectionType.TRIANGLE);
// NONE
// knot.setTextureModeNone(Color.BROWN);
// IMAGE
// knot.setTextureModeImage(getClass().getResource("res/LaminateSteel.jpg").toExternalForm());
// PATTERN
// knot.setTextureModePattern(3d);
// FUNCTION
// knot.setTextureModeVertices1D(1530,t->knot.getTau(t));
knot.setTextureModeVertices1D(ColorPalette.GREEN, 8, t -> knot.getTau(t.doubleValue()));
// DENSITY
// knot.setTextureModeVertices3D(256*256,dens);
// FACES
// knot.setTextureModeFaces(256*256);
knot.getTransforms().addAll(new Rotate(0, Rotate.X_AXIS), rotateY);
group.getChildren().add(knot);
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 + 100_000_000l) {
// Point3D loc = knot.getPositionAt((count.get()%100)*2d*Math.PI/100d);
// Point3D dir = knot.getTangentAt((count.get()%100)*2d*Math.PI/100d);
// cameraTransform.t.setX(loc.x);
// cameraTransform.t.setY(loc.y);
// cameraTransform.t.setZ(-loc.z);
// javafx.geometry.Point3D axis = cameraTransform.rx.getAxis();
// javafx.geometry.Point3D cross = axis.crossProduct(-dir.x,-dir.y,-dir.z);
// double angle = axis.angle(-dir.x,-dir.y,-dir.z);
// cameraTransform.rx.setAngle(angle);
// cameraTransform.rx.setAxis(new javafx.geometry.Point3D(cross.getX(),-cross.getY(),cross.getZ()));
// 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));
// knot.setDensity(dens);
// knot.setP(1+(count.get()%5));
// knot.setQ(2+(count.get()%15));
// if(count.get()%100<50){
// knot.setDrawMode(DrawMode.LINE);
// } else {
// knot.setDrawMode(DrawMode.FILL);
// }
// knot.setColors((int)Math.pow(2,count.get()%16));
// knot.setMajorRadius(0.5d+(count.get()%10));
// knot.setMinorRadius(2d+(count.get()%60));
// knot.setWireRadius(0.1d+(count.get()%6)/10d);
// knot.setPatternScale(1d+(count.get()%10)*3d);
knot.setSectionType(SectionType.values()[count.get() % SectionType.values().length]);
count.getAndIncrement();
lastEffect = now;
}
}
};
primaryStage.setTitle("F(X)yz - Knots");
primaryStage.setScene(scene);
primaryStage.show();
OBJWriter writer = new OBJWriter((TriangleMesh) knot.getMesh(), "knot");
writer.setMaterialColor(Color.BROWN);
writer.exportMesh();
timerEffect.start();
}
use of javafx.animation.AnimationTimer in project FXyzLib by Birdasaur.
the class Scatter3DTest 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<>();
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))), // <-- f
i)));
ScatterMesh scatter = new ScatterMesh(data, true, 1, 0);
// NONE
// scatter.setTextureModeNone(Color.ROYALBLUE);
// scatter.setDrawMode(DrawMode.LINE);
// IMAGE
// scatter.setTextureModeImage(getClass().getResource("res/steel-background1.jpg").toExternalForm());
// scatter.setTextureModeImage(getClass().getResource("res/share-carousel2.jpg").toExternalForm());
// DENSITY
scatter.setTextureModeVertices3D(1530, p -> p.magnitude());
// scatter.setTextureModeVertices1D(1530,p->Math.sqrt(p.doubleValue()));
// scatter.setTextureModeVertices3D(1530,p->Math.sin(p.y/50)*Math.cos(p.x/40)*p.z);
// FACES
// scatter.setTextureModeFaces(Palette.ColorPalette.HSB,1530);
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();
System.out.println("time " + (System.currentTimeMillis() - time));
final Timeline rotateEffect2 = new Timeline();
TexturedMesh t1 = scatter.getMeshFromId("1");
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 = scatter.getMeshFromId("2");
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();
final boolean constantVertices = true;
lastEffect = System.nanoTime();
AtomicInteger count = new AtomicInteger(0);
AnimationTimer timerEffect = new AnimationTimer() {
@Override
public void handle(long now) {
if (now > lastEffect + 50_000_000l) {
// if(count.get()%10<2){
// scatter.setTextureModeNone(Color.hsb(count.get()%360, 1, 1));
// } else if(count.get()%10<4){
// scatter.setTextureModeImage(getClass().getResource("res/steel-background1.jpg").toExternalForm());
// } else if(count.get()%10<8){
// scatter.setTextureModeVertices3D(1530,p->(double)(p.y/(20+count.get()%20))*(p.x/(10+count.get()%10)));
// } else {
// scatter.setTextureModeFaces(1530);
// }
//
// if(count.get()%20>15){
// scatter.setDrawMode(DrawMode.LINE);
// } else {
// scatter.setDrawMode(DrawMode.FILL);
// }
// scatter.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) (scatter.getChildren().get(0))).getMesh(), "scatter");
writer.setTextureColors(6);
//writer.setTexturePattern();
// writer.setTextureImage(getClass().getResource("res/LaminateSteel.jpg").toExternalForm());
writer.exportMesh();
}
use of javafx.animation.AnimationTimer in project FXyzLib by Birdasaur.
the class SegmentedTorusTest 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(-4000);
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(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);
torus = new SegmentedTorusMesh(50, 42, 0, 500d, 300d);
// PhongMaterial matTorus = new PhongMaterial(Color.FIREBRICK);
// torus.setMaterial(matTorus);
banner = new SegmentedTorusMesh(50, 42, 14, 500d, 300d);
// PhongMaterial matBanner = new PhongMaterial();
// matBanner.setDiffuseMap(new Image(getClass().getResource("res/Duke3DprogressionSmall.jpg").toExternalForm()));
// banner.setMaterial(matBanner);
// torus.setDrawMode(DrawMode.LINE);
// NONE
// torus.setTextureModeNone(Color.FORESTGREEN);
// IMAGE
// torus.setTextureModeImage(getClass().getResource("res/grid1.png").toExternalForm());
banner.setTextureModeImage(getClass().getResource("res/office.jpg").toExternalForm());
// PATTERN
// torus.setTextureModePattern(1.0d);
// DENSITY
torus.setTextureModeVertices3D(1530, dens);
// FACES
// torus.setTextureModeFaces(256*256);
torus.getTransforms().addAll(new Rotate(0, Rotate.X_AXIS), rotateY);
banner.getTransforms().addAll(new Rotate(0, Rotate.X_AXIS), rotateY);
group.getChildren().addAll(torus, banner);
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);
}
});
final Timeline bannerEffect = new Timeline();
bannerEffect.setCycleCount(Timeline.INDEFINITE);
final KeyValue kv1 = new KeyValue(rotateY.angleProperty(), 360);
final KeyFrame kf1 = new KeyFrame(Duration.millis(10000), kv1);
bannerEffect.getKeyFrames().addAll(kf1);
bannerEffect.play();
lastEffect = System.nanoTime();
AtomicInteger count = new AtomicInteger();
AnimationTimer timerEffect = new AnimationTimer() {
@Override
public void handle(long now) {
if (now > lastEffect + 100_000_000l) {
dens = p -> 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.setMinorRadius(150+10*(count.get()%10));
// torus.setPatternScale(1d+(count.get()%10)*5d);
count.getAndIncrement();
lastEffect = now;
}
}
};
primaryStage.setTitle("F(X)yz - Segmented Torus");
primaryStage.setScene(scene);
primaryStage.show();
timerEffect.start();
}
use of javafx.animation.AnimationTimer in project FXyzLib by Birdasaur.
the class TetrahedraTest 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);
tetra = new TetrahedraMesh(10, 7, null);
// cylinder = new PrismMesh(0.2,2,3); //,new Point3D(-5,5,0),new Point3D(0,0,5));
tetra.setDrawMode(DrawMode.LINE);
tetra.setCullFace(CullFace.NONE);
// NONE
// cylinder.setTextureModeNone(Color.ROYALBLUE);
// IMAGE
// tetra.setTextureModeImage(getClass().getResource("res/steel-mesh.jpg").toExternalForm());
// tetra.setTextureModeVertices1D(6, t->t);
// cylinder.setColorPalette(ColorPalette.GREEN);
// DENSITY
tetra.setTextureModeVertices3D(1530, p -> p.magnitude());
// cylinder.setTextureModeVertices3D(1530,p->(double)cylinder.unTransform(p).magnitude());
// FACES
// tetra.setTextureModeFaces(1530);
tetra.getTransforms().addAll(new Rotate(0, Rotate.X_AXIS), rotateY);
group.getChildren().add(tetra);
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 - Tetrahedra 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.animation.AnimationTimer in project FXyzLib by Birdasaur.
the class BezierTest 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(-10);
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);
// List<Point3D> knots=Arrays.asList(new Point3D(0f,0f,0f),new Point3D(3f,0f,2f),
// new Point3D(5f,2f,3f),new Point3D(7f,-3f,0f),new Point3D(6f,-1f,-4f));
List<Point3D> knots = Arrays.asList(new Point3D(3f, 0f, 0f), new Point3D(0.77171f, 1.68981f, 0.989821f), new Point3D(-0.681387f, 0.786363f, -0.281733f), new Point3D(-2.31757f, -0.680501f, -0.909632f), new Point3D(-0.404353f, -2.81233f, 0.540641f), new Point3D(1.1316f, -0.727237f, 0.75575f), new Point3D(1.1316f, 0.727237f, -0.75575f), new Point3D(-0.404353f, 2.81233f, -0.540641f), new Point3D(-2.31757f, 0.680501f, 0.909632f), new Point3D(-0.681387f, -0.786363f, 0.281733f), new Point3D(0.77171f, -1.68981f, -0.989821f), new Point3D(3f, 0f, 0f));
boolean showControlPoints = true;
boolean showKnots = true;
InterpolateBezier interpolate = new InterpolateBezier(knots);
beziers = new ArrayList<>();
AtomicInteger sp = new AtomicInteger();
if (showKnots || showControlPoints) {
interpolate.getSplines().forEach(spline -> {
Point3D k0 = spline.getPoints().get(0);
Point3D k1 = spline.getPoints().get(1);
Point3D k2 = spline.getPoints().get(2);
Point3D k3 = spline.getPoints().get(3);
if (showKnots) {
Sphere s = new Sphere(0.2d);
s.getTransforms().add(new Translate(k0.x, k0.y, k0.z));
s.setMaterial(new PhongMaterial(Color.GREENYELLOW));
group.getChildren().add(s);
s = new Sphere(0.2d);
s.getTransforms().add(new Translate(k3.x, k3.y, k3.z));
s.setMaterial(new PhongMaterial(Color.GREENYELLOW));
group.getChildren().add(s);
}
if (showControlPoints) {
PrismMesh c = new PrismMesh(0.03d, 1d, 1, k0, k1);
c.setTextureModeNone(Color.GREEN);
group.getChildren().add(c);
c = new PrismMesh(0.03d, 1d, 1, k1, k2);
c.setTextureModeNone(Color.GREEN);
group.getChildren().add(c);
c = new PrismMesh(0.03d, 1d, 1, k2, k3);
c.setTextureModeNone(Color.GREEN);
group.getChildren().add(c);
Sphere s = new Sphere(0.1d);
s.getTransforms().add(new Translate(k1.x, k1.y, k1.z));
s.setMaterial(new PhongMaterial(Color.RED));
group.getChildren().add(s);
s = new Sphere(0.1d);
s.getTransforms().add(new Translate(k2.x, k2.y, k2.z));
s.setMaterial(new PhongMaterial(Color.RED));
group.getChildren().add(s);
}
});
}
long time = System.currentTimeMillis();
interpolate.getSplines().stream().forEach(spline -> {
BezierMesh bezier = new BezierMesh(spline, 0.1d, 300, 20, 0, 0);
bezier.setTextureModeVertices1D(1530, t -> spline.getKappa(t.doubleValue()));
bezier.getTransforms().addAll(new Rotate(0, Rotate.X_AXIS), rotateY);
beziers.add(bezier);
});
//43.815->25.606->15
System.out.println("time: " + (System.currentTimeMillis() - time));
group.getChildren().addAll(beziers);
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 + 1_000_000_000l) {
// Point3D loc = knot.getPositionAt((count.get()%100)*2d*Math.PI/100d);
// Point3D dir = knot.getTangentAt((count.get()%100)*2d*Math.PI/100d);
// cameraTransform.t.setX(loc.x);
// cameraTransform.t.setY(loc.y);
// cameraTransform.t.setZ(-loc.z);
// javafx.geometry.Point3D axis = cameraTransform.rx.getAxis();
// javafx.geometry.Point3D cross = axis.crossProduct(-dir.x,-dir.y,-dir.z);
// double angle = axis.angle(-dir.x,-dir.y,-dir.z);
// cameraTransform.rx.setAngle(angle);
// cameraTransform.rx.setAxis(new javafx.geometry.Point3D(cross.getX(),-cross.getY(),cross.getZ()));
// 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));
func = t -> Math.pow(t.doubleValue(), (count.get() % 5d));
beziers.forEach(b -> b.setFunction(func));
// knot.setP(1+(count.get()%5));
// knot.setQ(2+(count.get()%15));
// if(count.get()%100<50){
// knot.setDrawMode(DrawMode.LINE);
// } else {
// knot.setDrawMode(DrawMode.FILL);
// }
// beziers.forEach(b->b.setColors((int)Math.pow(2,count.get()%16)));
// beziers.forEach(b->b.setWireRadius(0.1d+(count.get()%6)/10d));
// beziers.forEach(b->b.setPatternScale(1d+(count.get()%10)*3d));
// beziers.forEach(b->b.setSectionType(SectionType.values()[count.get()%SectionType.values().length]));
count.getAndIncrement();
lastEffect = now;
}
}
};
primaryStage.setTitle("F(X)yz - Bezier Splines");
primaryStage.setScene(scene);
primaryStage.show();
timerEffect.start();
}
Aggregations