어떻게하면 javaFX의 3D 객체 주위를 원으로 카메라를 회전시킬 수 있습니까? 난 내가javaFX에서 객체 주위를 회전 카메라로 회전
camera.setRotate(angle);
사용하여 자체 주위를 회전 할 수 있습니다 알고 있지만 난 물체가 여전히하려는 카메라가 회전하고 회전 축처럼 같은 장소에 포인트가 해당 객체입니다.
어떻게하면 javaFX의 3D 객체 주위를 원으로 카메라를 회전시킬 수 있습니까? 난 내가javaFX에서 객체 주위를 회전 카메라로 회전
camera.setRotate(angle);
사용하여 자체 주위를 회전 할 수 있습니다 알고 있지만 난 물체가 여전히하려는 카메라가 회전하고 회전 축처럼 같은 장소에 포인트가 해당 객체입니다.
일반적인 기술은 다음에 대한 응답을 정의합니다. RotateTransition around a pivot? 회전 변환을 정의한 다음 타임 라인 (또는 애니메이션 타이머)을 사용하여 회전 변환의 각도에 적절하게 애니메이션을 적용합니다. 객체를 중앙에 배치하려면 회전하기 전에 카메라를 객체의 원점으로 변환 할 수 있습니다.
여기 샘플 그냥 3D 앱이 작업을 수행하는 방법을 보여: 카메라가 큐브 주위에 회전 샘플에서
센터는 어느 장면 공동에있다 0,0,0을 세로로 표시합니다. 애니메이션 회전은 y 축 주위입니다. 샘플 이미지는 다양한 회전 각도의 스냅 샷을 보여줍니다. 장면의 객체를 클릭하면 카메라를 객체의 중심에 배치하고 객체를 중심으로 회전 할 수 있습니다.
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);
}
}
코드를 보내 주셔서 감사합니다. 매우 도움이됩니다. – tokyo