textflow setstyle setfont font color javafx 3d perspectivecamera

setstyle - cámara de perspectiva giratoria alrededor de un objeto en javaFX



setstyle label javafx (1)

¿Cómo puedo hacer que la cámara gire en círculo alrededor de un objeto 3d en javaFX? Sé que puedo rotarlo alrededor de sí mismo usando

camera.setRotate(angle);

pero quiero que un objeto esté quieto y que la cámara gire y apunte al mismo punto, como el eje de rotación es ese objeto.


La técnica general se define en las respuestas a: ¿ Rotar la transición alrededor de un pivote? Usted define una transformación de rotación y luego usa una línea de tiempo (o un temporizador de animación) para animar el ángulo de la transformación de rotación, según corresponda. Si desea centrar el objeto, puede trasladar la cámara al origen del objeto antes de girar.

El ejemplo aquí solo demuestra cómo hacer esto para una aplicación 3D:

En la muestra, la cámara está girando alrededor del cubo, cuyo centro está en las coordenadas de escena 0,0,0. La rotación animada está alrededor del eje y. Las imágenes de muestra muestran instantáneas con varios grados de rotación. Puede hacer clic en un objeto de la escena para centrar la cámara en el objeto y rotarlo.

import javafx.animation.*; import javafx.application.Application; import javafx.scene.*; import javafx.scene.paint.*; import javafx.scene.shape.*; import javafx.scene.transform.*; import javafx.stage.Stage; import javafx.util.Duration; public class CameraRotationApp extends Application { private Parent createContent() throws Exception { Sphere sphere = new Sphere(2.5); sphere.setMaterial(new PhongMaterial(Color.FORESTGREEN)); sphere.setTranslateZ(7); sphere.setTranslateX(2); Box box = new Box(5, 5, 5); box.setMaterial(new PhongMaterial(Color.RED)); Translate pivot = new Translate(); Rotate yRotate = new Rotate(0, Rotate.Y_AXIS); // Create and position camera PerspectiveCamera camera = new PerspectiveCamera(true); camera.getTransforms().addAll ( pivot, yRotate, new Rotate(-20, Rotate.X_AXIS), new Translate(0, 0, -50) ); // animate the camera position. Timeline timeline = new Timeline( new KeyFrame( Duration.seconds(0), new KeyValue(yRotate.angleProperty(), 0) ), new KeyFrame( Duration.seconds(15), new KeyValue(yRotate.angleProperty(), 360) ) ); timeline.setCycleCount(Timeline.INDEFINITE); timeline.play(); // Build the Scene Graph Group root = new Group(); root.getChildren().add(camera); root.getChildren().add(box); root.getChildren().add(sphere); // set the pivot for the camera position animation base upon mouse clicks on objects root.getChildren().stream() .filter(node -> !(node instanceof Camera)) .forEach(node -> node.setOnMouseClicked(event -> { pivot.setX(node.getTranslateX()); pivot.setY(node.getTranslateY()); pivot.setZ(node.getTranslateZ()); }) ); // Use a SubScene SubScene subScene = new SubScene( root, 300,300, true, SceneAntialiasing.BALANCED ); subScene.setFill(Color.ALICEBLUE); subScene.setCamera(camera); Group group = new Group(); group.getChildren().add(subScene); return group; } @Override public void start(Stage stage) throws Exception { stage.setResizable(false); Scene scene = new Scene(createContent()); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(args); } }