kopia lustrzana https://github.com/jameshball/osci-render
Clean-up Controller and correctly re-apply settings when new object is loaded
rodzic
a1539eb6f8
commit
105054da84
|
@ -46,7 +46,6 @@ public class Controller implements Initializable {
|
||||||
|
|
||||||
private static final int SAMPLE_RATE = 192000;
|
private static final int SAMPLE_RATE = 192000;
|
||||||
private static final InputStream DEFAULT_OBJ = Controller.class.getResourceAsStream("/models/cube.obj");
|
private static final InputStream DEFAULT_OBJ = Controller.class.getResourceAsStream("/models/cube.obj");
|
||||||
private static final double DEFAULT_ROTATE_SPEED = 0.1;
|
|
||||||
|
|
||||||
private final FileChooser fileChooser = new FileChooser();
|
private final FileChooser fileChooser = new FileChooser();
|
||||||
private final Renderer<List<Shape>, AudioInputStream> renderer;
|
private final Renderer<List<Shape>, AudioInputStream> renderer;
|
||||||
|
@ -129,9 +128,9 @@ public class Controller implements Initializable {
|
||||||
scaleSlider,
|
scaleSlider,
|
||||||
scaleEffect::setScale,
|
scaleEffect::setScale,
|
||||||
focalLengthSlider,
|
focalLengthSlider,
|
||||||
this::setFocalLength,
|
d -> updateFocalLength(),
|
||||||
objectRotateSpeedSlider,
|
objectRotateSpeedSlider,
|
||||||
this::setObjectRotateSpeed
|
d -> updateObjectRotateSpeed()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,7 +145,6 @@ public class Controller implements Initializable {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Refactor and clean up duplication
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL url, ResourceBundle resourceBundle) {
|
public void initialize(URL url, ResourceBundle resourceBundle) {
|
||||||
Map<Slider, Consumer<Double>> sliders = initializeSliderMap();
|
Map<Slider, Consumer<Double>> sliders = initializeSliderMap();
|
||||||
|
@ -158,36 +156,16 @@ public class Controller implements Initializable {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
InvalidationListener translationUpdate = observable ->
|
translationXTextField.textProperty().addListener(e -> updateTranslation());
|
||||||
translateEffect.setTranslation(new Vector2(
|
translationYTextField.textProperty().addListener(e -> updateTranslation());
|
||||||
tryParse(translationXTextField.getText()),
|
|
||||||
tryParse(translationYTextField.getText())
|
|
||||||
));
|
|
||||||
|
|
||||||
translationXTextField.textProperty().addListener(translationUpdate);
|
cameraXTextField.textProperty().addListener(e -> updateCameraPos());
|
||||||
translationYTextField.textProperty().addListener(translationUpdate);
|
cameraYTextField.textProperty().addListener(e -> updateCameraPos());
|
||||||
|
cameraZTextField.textProperty().addListener(e -> updateCameraPos());
|
||||||
|
|
||||||
InvalidationListener cameraPosUpdate = observable ->
|
rotateXTextField.textProperty().addListener(e -> updateRotation());
|
||||||
producer.setFrameSettings(ObjSettingsFactory.cameraPosition(new Vector3(
|
rotateYTextField.textProperty().addListener(e -> updateRotation());
|
||||||
tryParse(cameraXTextField.getText()),
|
rotateZTextField.textProperty().addListener(e -> updateRotation());
|
||||||
tryParse(cameraYTextField.getText()),
|
|
||||||
tryParse(cameraZTextField.getText())
|
|
||||||
)));
|
|
||||||
|
|
||||||
cameraXTextField.textProperty().addListener(cameraPosUpdate);
|
|
||||||
cameraYTextField.textProperty().addListener(cameraPosUpdate);
|
|
||||||
cameraZTextField.textProperty().addListener(cameraPosUpdate);
|
|
||||||
|
|
||||||
InvalidationListener rotateUpdate = observable ->
|
|
||||||
producer.setFrameSettings(ObjSettingsFactory.rotation(new Vector3(
|
|
||||||
tryParse(rotateXTextField.getText()),
|
|
||||||
tryParse(rotateYTextField.getText()),
|
|
||||||
tryParse(rotateZTextField.getText())
|
|
||||||
)));
|
|
||||||
|
|
||||||
rotateXTextField.textProperty().addListener(rotateUpdate);
|
|
||||||
rotateYTextField.textProperty().addListener(rotateUpdate);
|
|
||||||
rotateZTextField.textProperty().addListener(rotateUpdate);
|
|
||||||
|
|
||||||
resetRotationButton.setOnAction(e -> producer.setFrameSettings(ObjSettingsFactory.resetRotation()));
|
resetRotationButton.setOnAction(e -> producer.setFrameSettings(ObjSettingsFactory.resetRotation()));
|
||||||
|
|
||||||
|
@ -222,7 +200,7 @@ public class Controller implements Initializable {
|
||||||
|
|
||||||
recordButton.setOnAction(event -> toggleRecord());
|
recordButton.setOnAction(event -> toggleRecord());
|
||||||
|
|
||||||
setObjectRotateSpeed(DEFAULT_ROTATE_SPEED);
|
updateObjectRotateSpeed();
|
||||||
|
|
||||||
renderer.addEffect(EffectType.SCALE, scaleEffect);
|
renderer.addEffect(EffectType.SCALE, scaleEffect);
|
||||||
renderer.addEffect(EffectType.ROTATE, rotateEffect);
|
renderer.addEffect(EffectType.ROTATE, rotateEffect);
|
||||||
|
@ -258,16 +236,48 @@ public class Controller implements Initializable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setFocalLength(double focalLength) {
|
private void updateFocalLength() {
|
||||||
|
double focalLength = focalLengthSlider.getValue();
|
||||||
producer.setFrameSettings(ObjSettingsFactory.focalLength(focalLength));
|
producer.setFrameSettings(ObjSettingsFactory.focalLength(focalLength));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setObjectRotateSpeed(double rotateSpeed) {
|
private void updateObjectRotateSpeed() {
|
||||||
|
double rotateSpeed = objectRotateSpeedSlider.getValue();
|
||||||
producer.setFrameSettings(
|
producer.setFrameSettings(
|
||||||
ObjSettingsFactory.rotateSpeed((Math.exp(3 * rotateSpeed) - 1) / 50)
|
ObjSettingsFactory.rotateSpeed((Math.exp(3 * rotateSpeed) - 1) / 50)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateTranslation() {
|
||||||
|
translateEffect.setTranslation(new Vector2(
|
||||||
|
tryParse(translationXTextField.getText()),
|
||||||
|
tryParse(translationYTextField.getText())
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resetCameraPos() {
|
||||||
|
cameraXTextField.setText("");
|
||||||
|
cameraYTextField.setText("");
|
||||||
|
cameraZTextField.setText("");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateCameraPos() {
|
||||||
|
renderer.flushFrames();
|
||||||
|
producer.setFrameSettings(ObjSettingsFactory.cameraPosition(new Vector3(
|
||||||
|
tryParse(cameraXTextField.getText()),
|
||||||
|
tryParse(cameraYTextField.getText()),
|
||||||
|
tryParse(cameraZTextField.getText())
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateRotation() {
|
||||||
|
producer.setFrameSettings(ObjSettingsFactory.rotation(new Vector3(
|
||||||
|
tryParse(rotateXTextField.getText()),
|
||||||
|
tryParse(rotateYTextField.getText()),
|
||||||
|
tryParse(rotateZTextField.getText())
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
|
||||||
private double tryParse(String value) {
|
private double tryParse(String value) {
|
||||||
try {
|
try {
|
||||||
return Double.parseDouble(value);
|
return Double.parseDouble(value);
|
||||||
|
@ -290,10 +300,14 @@ public class Controller implements Initializable {
|
||||||
try {
|
try {
|
||||||
producer.stop();
|
producer.stop();
|
||||||
String path = file.getAbsolutePath();
|
String path = file.getAbsolutePath();
|
||||||
|
resetCameraPos();
|
||||||
producer = new FrameProducer<>(
|
producer = new FrameProducer<>(
|
||||||
renderer,
|
renderer,
|
||||||
ParserFactory.getParser(path).parse()
|
ParserFactory.getParser(path).parse()
|
||||||
);
|
);
|
||||||
|
updateRotation();
|
||||||
|
updateObjectRotateSpeed();
|
||||||
|
updateFocalLength();
|
||||||
executor.submit(producer);
|
executor.submit(producer);
|
||||||
|
|
||||||
if (file.exists() && !file.isDirectory()) {
|
if (file.exists() && !file.isDirectory()) {
|
||||||
|
|
Ładowanie…
Reference in New Issue