From be2d51c440f8ec09feb8a8828504dbc8e3a0c16b Mon Sep 17 00:00:00 2001 From: James Ball Date: Sun, 10 Jul 2022 16:07:23 +0100 Subject: [PATCH] Change perspective effect to have a 0 value that applies no effect, add reset rotation buttons --- .../java/sh/ball/audio/effect/EffectType.java | 1 + .../ball/audio/effect/PerspectiveEffect.java | 16 +++++++++--- .../gui/controller/EffectsController.java | 25 +++++++++++++++++-- src/main/resources/fxml/effects.fxml | 17 ++++++++++--- 4 files changed, 51 insertions(+), 8 deletions(-) diff --git a/src/main/java/sh/ball/audio/effect/EffectType.java b/src/main/java/sh/ball/audio/effect/EffectType.java index 20f2995..94e9c0f 100644 --- a/src/main/java/sh/ball/audio/effect/EffectType.java +++ b/src/main/java/sh/ball/audio/effect/EffectType.java @@ -12,6 +12,7 @@ public enum EffectType { TRACE_MAX(-1), SMOOTH(100), DEPTH_3D(52), + Z_POS_3D(-1), ROTATE_SPEED_3D(-1), ROTATE_X(-1), ROTATE_Y(-1), diff --git a/src/main/java/sh/ball/audio/effect/PerspectiveEffect.java b/src/main/java/sh/ball/audio/effect/PerspectiveEffect.java index 4b4b1c3..f73447e 100644 --- a/src/main/java/sh/ball/audio/effect/PerspectiveEffect.java +++ b/src/main/java/sh/ball/audio/effect/PerspectiveEffect.java @@ -8,8 +8,9 @@ public class PerspectiveEffect implements SettableEffect { private double zPos = 1.0; private Vector3 baseRotation = new Vector3(Math.PI, Math.PI, 0); - private Vector3 currentRotation = baseRotation; + private Vector3 currentRotation = new Vector3(); private double rotateSpeed = 0.0; + private double effectScale = 1.0; @Override public Vector2 apply(int count, Vector2 vector) { @@ -20,13 +21,17 @@ public class PerspectiveEffect implements SettableEffect { double focalLength = 1.0; return new Vector2( - vertex.x * focalLength / (vertex.z - zPos), - vertex.y * focalLength / (vertex.z - zPos) + (1 - effectScale) * vector.x + effectScale * (vertex.x * focalLength / (vertex.z - zPos)), + (1 - effectScale) * vector.y + effectScale * (vertex.y * focalLength / (vertex.z - zPos)) ); } @Override public void setValue(double value) { + this.effectScale = value; + } + + public void setZPos(double value) { zPos = 1.0 + (value - 0.1) * 3; } @@ -49,4 +54,9 @@ public class PerspectiveEffect implements SettableEffect { public void setRotationZ(double rotateZ) { this.baseRotation = new Vector3(baseRotation.x, baseRotation.y, rotateZ * Math.PI); } + + public void resetRotation() { + baseRotation = new Vector3(); + currentRotation = new Vector3(); + } } diff --git a/src/main/java/sh/ball/gui/controller/EffectsController.java b/src/main/java/sh/ball/gui/controller/EffectsController.java index ff44a12..09ebc8c 100644 --- a/src/main/java/sh/ball/gui/controller/EffectsController.java +++ b/src/main/java/sh/ball/gui/controller/EffectsController.java @@ -63,6 +63,8 @@ public class EffectsController implements Initializable, SubController { @FXML private EffectComponentGroup rotateZ; @FXML + private EffectComponentGroup zPos; + @FXML private EffectComponentGroup translationScale; @FXML private EffectComponentGroup translationSpeed; @@ -82,6 +84,10 @@ public class EffectsController implements Initializable, SubController { private CheckBox translateCheckBox; @FXML private Button resetTranslationButton; + @FXML + private Button resetRotationButton; + @FXML + private Button resetPerspectiveRotationButton; public EffectsController() { this.wobbleEffect = new WobbleEffect(DEFAULT_SAMPLE_RATE); @@ -119,7 +125,7 @@ public class EffectsController implements Initializable, SubController { if (type == EffectType.DEPTH_3D) { Platform.runLater(() -> - List.of(rotateSpeed3D, rotateX, rotateY, rotateZ).forEach(ecg -> { + List.of(rotateSpeed3D, rotateX, rotateY, rotateZ, zPos).forEach(ecg -> { ecg.controller.slider.setDisable(!checked); ecg.controller.spinner.setDisable(!checked); }) @@ -162,6 +168,7 @@ public class EffectsController implements Initializable, SubController { rotateX.controller.setAnimator(new EffectAnimator(DEFAULT_SAMPLE_RATE, new ConsumerEffect((perspectiveEffect::setRotationX)))); rotateY.controller.setAnimator(new EffectAnimator(DEFAULT_SAMPLE_RATE, new ConsumerEffect((perspectiveEffect::setRotationY)))); rotateZ.controller.setAnimator(new EffectAnimator(DEFAULT_SAMPLE_RATE, new ConsumerEffect((perspectiveEffect::setRotationZ)))); + zPos.controller.setAnimator(new EffectAnimator(DEFAULT_SAMPLE_RATE, new ConsumerEffect((perspectiveEffect::setZPos)))); traceMin.controller.setAnimator(new EffectAnimator(DEFAULT_SAMPLE_RATE, new ConsumerEffect(audioPlayer::setTraceMin))); traceMax.controller.setAnimator(new EffectAnimator(DEFAULT_SAMPLE_RATE, new ConsumerEffect(audioPlayer::setTraceMax))); vectorCancelling.controller.setAnimator(new EffectAnimator(DEFAULT_SAMPLE_RATE, new VectorCancellingEffect())); @@ -213,10 +220,23 @@ public class EffectsController implements Initializable, SubController { translateEllipseCheckBox.selectedProperty().addListener((e, old, ellipse) -> translateEffect.setEllipse(ellipse)); - List.of(rotateSpeed3D, rotateX, rotateY, rotateZ).forEach(ecg -> { + List.of(rotateSpeed3D, rotateX, rotateY, rotateZ, zPos).forEach(ecg -> { ecg.controller.slider.setDisable(true); ecg.controller.spinner.setDisable(true); }); + + resetRotationButton.setOnAction(e -> { + rotateEffect.resetTheta(); + rotateSpeed.controller.slider.setValue(0); + }); + + resetPerspectiveRotationButton.setOnAction(e -> { + rotateX.controller.slider.setValue(0); + rotateY.controller.slider.setValue(0); + rotateZ.controller.slider.setValue(0); + rotateSpeed3D.controller.slider.setValue(0); + perspectiveEffect.resetRotation(); + }); } private List effects() { @@ -230,6 +250,7 @@ public class EffectsController implements Initializable, SubController { traceMin, traceMax, rotateSpeed3D, + zPos, rotateX, rotateY, rotateZ, diff --git a/src/main/resources/fxml/effects.fxml b/src/main/resources/fxml/effects.fxml index eaa3830..84ff6a0 100644 --- a/src/main/resources/fxml/effects.fxml +++ b/src/main/resources/fxml/effects.fxml @@ -11,9 +11,9 @@ - + - + @@ -79,11 +79,22 @@ - + + +