下面列出了怎么用javafx.scene.PerspectiveCamera的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public void start(Stage stage) {
Group group = buildScene();
Scene scene = new Scene(
new StackPane(group),
VIEWPORT_SIZE, VIEWPORT_SIZE,
true,
SceneAntialiasing.BALANCED
);
scene.setFill(Color.rgb(10, 10, 40));
scene.setCamera(new PerspectiveCamera());
stage.setScene(scene);
stage.show();
stage.setFullScreen(true);
rotateAroundYAxis(group).play();
}
@Override
void initTimeline() {
getNode().getScene().setCamera(new PerspectiveCamera());
getNode().setRotationAxis(Y_AXIS);
setTimeline(new Timeline(
new KeyFrame(Duration.millis(0),
new KeyValue(getNode().opacityProperty(), 1, AnimateFXInterpolator.EASE)
),
new KeyFrame(Duration.millis(225),
new KeyValue(getNode().rotateProperty(), 15, AnimateFXInterpolator.EASE)
),
new KeyFrame(Duration.millis(750),
new KeyValue(getNode().opacityProperty(), 0, AnimateFXInterpolator.EASE),
new KeyValue(getNode().rotateProperty(), -90, AnimateFXInterpolator.EASE)
)
));
getTimeline().setOnFinished(event -> getNode().getScene().setCamera(new ParallelCamera()));
}
@Override
void initTimeline() {
getNode().getScene().setCamera(new PerspectiveCamera());
getNode().setRotationAxis(X_AXIS);
setTimeline(new Timeline(
new KeyFrame(Duration.millis(0),
new KeyValue(getNode().opacityProperty(), 1, AnimateFXInterpolator.EASE)
),
new KeyFrame(Duration.millis(225),
new KeyValue(getNode().rotateProperty(), 20, AnimateFXInterpolator.EASE)
),
new KeyFrame(Duration.millis(750),
new KeyValue(getNode().opacityProperty(), 0, AnimateFXInterpolator.EASE),
new KeyValue(getNode().rotateProperty(), -90, AnimateFXInterpolator.EASE)
)
));
getTimeline().setOnFinished(event -> getNode().getScene().setCamera(new ParallelCamera()));
}
private void loadCamera(Scene scene) {
//initialize camera
camera = new PerspectiveCamera(true);
camera.setVerticalFieldOfView(RUN_JASON);
//setup camera transform for rotational support
cameraTransform.setTranslate(0, 0, 0);
cameraTransform.getChildren().add(camera);
camera.setNearClip(0.1);
camera.setFarClip(100000.0);
camera.setTranslateZ(-5000);
cameraTransform.ry.setAngle(0.0);
cameraTransform.rx.setAngle(-45.0);
//add a Point Light for better viewing of the grid coordinate system
PointLight light = new PointLight(Color.GAINSBORO);
cameraTransform.getChildren().add(light);
cameraTransform.getChildren().add(new AmbientLight(Color.WHITE));
light.setTranslateX(camera.getTranslateX());
light.setTranslateY(camera.getTranslateY());
light.setTranslateZ(camera.getTranslateZ());
//attach camera to scene
scene.setCamera(camera);
}
public Skybox(Image topImg, Image bottomImg, Image leftImg, Image rightImg, Image frontImg, Image backImg, double size, PerspectiveCamera camera) {
super();
this.imageType = SkyboxImageType.MULTIPLE;
this.topImg = topImg;
this.bottomImg = bottomImg;
this.leftImg = leftImg;
this.rightImg = rightImg;
this.frontImg = frontImg;
this.backImg = backImg;
this.size.set(size);
this.camera = camera;
loadImageViews();
getTransforms().add(affine);
getChildren().addAll(views);
startTimer();
}
public ViewFrustum(final PerspectiveCamera camera, final double[] screenSize)
{
this.screenSize = screenSize.clone();
this.tanHalfFov = new double[2];
final double widthToHeightRatio = screenSize[0] / screenSize[1];
final double halfFovMainDimension = Math.toRadians(camera.getFieldOfView() / 2);
if (camera.isVerticalFieldOfView())
{
tanHalfFov[1] = Math.tan(halfFovMainDimension);
tanHalfFov[0] = tanHalfFov[1] * widthToHeightRatio;
}
else
{
tanHalfFov[0] = Math.tan(halfFovMainDimension);
tanHalfFov[1] = tanHalfFov[0] / widthToHeightRatio;
}
final ViewFrustumPlane[] newNearFarPlanes = new ViewFrustumPlane[2];
final double[] clipValues = {camera.getNearClip(), camera.getFarClip()};
for (int i = 0; i < 2; ++i)
{
final double clipVal = clipValues[i];
final RealInterval viewPlane2D = viewPlaneAtGivenDistance(clipVal);
newNearFarPlanes[i] = new ViewFrustumPlane();
newNearFarPlanes[i].minMin.setPosition(new double[] {viewPlane2D.realMin(0), viewPlane2D.realMin(1), clipVal});
newNearFarPlanes[i].minMax.setPosition(new double[] {viewPlane2D.realMin(0), viewPlane2D.realMax(1), clipVal});
newNearFarPlanes[i].maxMin.setPosition(new double[] {viewPlane2D.realMax(0), viewPlane2D.realMin(1), clipVal});
newNearFarPlanes[i].maxMax.setPosition(new double[] {viewPlane2D.realMax(0), viewPlane2D.realMax(1), clipVal});
}
nearFarPlanes = new ViewFrustumPlanes(
newNearFarPlanes[0],
newNearFarPlanes[1]
);
}
@Before
public void setUp()
{
camera = new PerspectiveCamera(true);
camera.setNearClip(0.1);
camera.setFarClip(10.0);
camera.setFieldOfView(45);
camera.setVerticalFieldOfView(true);
frustumCamera = new ViewFrustum(camera, new double[] {800, 600});
cameraTransform = new AffineTransform3D();
cameraTransform.setTranslation(0, 0, -1);
sceneTransform = new AffineTransform3D();
sceneTransform.set(
-1.9735242914056459E-4, -1.0436920839427981E-4, -2.061953312972022E-4, 3.0306137875177632,
-1.2649862727035413E-4, -1.7813723813362014E-4, 2.11240737752298E-4, 0.956379113095983,
-1.9341029860978865E-4, 2.2300587509429097E-4, 7.223755022420857E-5, -1.1240682338705246
);
sourceToWorldTransform = new AffineTransform3D();
sourceToWorldTransform.set(
64.0, 0.0, 0.0, 3674.0,
0.0, 64.0, 0.0, 3674.0,
0.0, 0.0, 80.0, 1540.0
);
}
@Override
void initTimeline() {
getNode().getScene().setCamera(new PerspectiveCamera());
getNode().setRotationAxis(Y_AXIS);
setTimeline(new Timeline(
new KeyFrame(Duration.millis(0),
new KeyValue(getNode().opacityProperty(), 0, Interpolator.EASE_IN),
new KeyValue(getNode().rotateProperty(), -90, Interpolator.EASE_IN)
),
new KeyFrame(Duration.millis(400),
new KeyValue(getNode().rotateProperty(), 20, Interpolator.EASE_IN)
),
new KeyFrame(Duration.millis(600),
new KeyValue(getNode().rotateProperty(), -10, Interpolator.EASE_IN)
),
new KeyFrame(Duration.millis(800),
new KeyValue(getNode().rotateProperty(), 5, Interpolator.EASE_IN)
),
new KeyFrame(Duration.millis(1000),
new KeyValue(getNode().opacityProperty(), 1, Interpolator.EASE_IN),
new KeyValue(getNode().rotateProperty(), 0, Interpolator.EASE_IN)
)
));
getTimeline().setOnFinished(event -> getNode().getScene().setCamera(new ParallelCamera()));
}
@Override
void initTimeline() {
getNode().getScene().setCamera(new PerspectiveCamera());
getNode().setRotationAxis(X_AXIS);
setTimeline(new Timeline(
new KeyFrame(Duration.millis(0),
new KeyValue(getNode().opacityProperty(), 0, Interpolator.EASE_IN),
new KeyValue(getNode().rotateProperty(), -90, Interpolator.EASE_IN)
),
new KeyFrame(Duration.millis(400),
new KeyValue(getNode().rotateProperty(), 20, Interpolator.EASE_IN)
),
new KeyFrame(Duration.millis(600),
new KeyValue(getNode().rotateProperty(), -10, Interpolator.EASE_IN)
),
new KeyFrame(Duration.millis(800),
new KeyValue(getNode().rotateProperty(), 5, Interpolator.EASE_IN)
),
new KeyFrame(Duration.millis(1000),
new KeyValue(getNode().opacityProperty(), 1, Interpolator.EASE_IN),
new KeyValue(getNode().rotateProperty(), 0, Interpolator.EASE_IN)
)
));
getTimeline().setOnFinished(event -> getNode().getScene().setCamera(new ParallelCamera()));
}
@Override
void initTimeline() {
getNode().getScene().setCamera(new PerspectiveCamera());
getNode().setRotationAxis(Y_AXIS);
setTimeline(new Timeline(
new KeyFrame(Duration.millis(0),
new KeyValue(getNode().rotateProperty(), 360, Interpolator.EASE_OUT)
),
new KeyFrame(Duration.millis(400),
new KeyValue(getNode().rotateProperty(), 190, Interpolator.EASE_OUT),
new KeyValue(getNode().translateZProperty(), -150, Interpolator.EASE_OUT)
),
new KeyFrame(Duration.millis(500),
new KeyValue(getNode().rotateProperty(), 170, Interpolator.EASE_IN),
new KeyValue(getNode().translateZProperty(), -150, Interpolator.EASE_IN)
),
new KeyFrame(Duration.millis(800),
new KeyValue(getNode().scaleXProperty(), 0.95, Interpolator.EASE_IN),
new KeyValue(getNode().scaleYProperty(), 0.95, Interpolator.EASE_IN),
new KeyValue(getNode().scaleZProperty(), 0.95, Interpolator.EASE_IN)
),
new KeyFrame(Duration.millis(1000),
new KeyValue(getNode().rotateProperty(), 0, Interpolator.EASE_IN),
new KeyValue(getNode().scaleXProperty(), 1, Interpolator.EASE_IN),
new KeyValue(getNode().scaleYProperty(), 1, Interpolator.EASE_IN),
new KeyValue(getNode().scaleZProperty(), 1, Interpolator.EASE_IN),
new KeyValue(getNode().translateZProperty(), 0, Interpolator.EASE_IN)
)
));
//TODO
getTimeline().setOnFinished(event -> getNode().getScene().setCamera(new ParallelCamera()));
}
private void init(Stage primaryStage) {
Group root = new Group();
root.setDepthTest(DepthTest.ENABLE);
primaryStage.setResizable(false);
primaryStage.setScene(new Scene(root, 400, 150, true));
primaryStage.getScene().setCamera(new PerspectiveCamera());
root.getTransforms().addAll(
new Translate(400 / 2, 150 / 2),
new Rotate(180, Rotate.X_AXIS)
);
root.getChildren().add(create3dContent());
}
private void init(Stage primaryStage) {
Group root = new Group();
root.setDepthTest(DepthTest.ENABLE);
primaryStage.setResizable(false);
primaryStage.setScene(new Scene(root, 500, 500, true));
primaryStage.getScene().setCamera(new PerspectiveCamera());
root.getTransforms().addAll(
new Translate(500 / 2, 500 / 2),
new Rotate(180, Rotate.X_AXIS)
);
root.getChildren().add(create3dContent());
}
private void init(Stage primaryStage) {
Group root = new Group();
root.setDepthTest(DepthTest.ENABLE);
primaryStage.setResizable(false);
primaryStage.setScene(new Scene(root, 400, 500, true));
primaryStage.getScene().setCamera(new PerspectiveCamera());
root.getTransforms().addAll(
new Translate(400 / 2, 500 / 2 + 100),
new Rotate(180, Rotate.X_AXIS)
);
root.getChildren().add(create3dContent());
}
@Override
public void start(final Stage s) throws Exception {
s.setTitle("Curbstone 3D");
final Curbstone c = new Curbstone(50, Color.web("#DC143C"), 1);
c.setTranslateX(0);
c.rx.setAngle(25);
c.ry.setAngle(45);
final Timeline animation = new Timeline();
animation.getKeyFrames().addAll(new KeyFrame(Duration.ZERO, new KeyValue(c.ry.angleProperty(), 0d)),
new KeyFrame(Duration.valueOf("20000ms"), new KeyValue(c.ry.angleProperty(), 360d)));
animation.setCycleCount(Animation.INDEFINITE);
// create root group
final Parent root = c;
// translate and rotate group so that origin is center and +Y is up
root.setTranslateX(200);
root.setTranslateY(75);
final Line line = new Line(200, 200, 200, 200);
final Rotate rotation = new Rotate(1, Rotate.Y_AXIS);
rotation.pivotXProperty().bind(line.startXProperty());
rotation.pivotYProperty().bind(line.startYProperty());
root.getTransforms().add(rotation);
// create scene
final Scene scene = new Scene(root, 400, 150);
scene.setCamera(new PerspectiveCamera());
s.setScene(scene);
s.show();
// start spining animation
animation.play();
}
public VirtualCameraDevice(PerspectiveCamera camera, Group hand){
this.hand = hand;
this.setCamera(camera);
setScriptingName("virtualCameraDevice");
//System.out.println("Setting camera frame transform");
manipulationFrame = new Group();
camera.getTransforms().add(zoomAffine);
cameraFrame.getTransforms().add(getOffset());
manipulationFrame.getChildren().addAll(camera, hand);
cameraFrame.getChildren().add(manipulationFrame);
//new RuntimeException().printStackTrace();
setZoomDepth(DEFAULT_ZOOM_DEPTH);
}
@Override
public void start(Stage stage) {
FlowGridPane pane = new FlowGridPane(7, 4, percentageTile, clockTile, gaugeTile, sparkLineTile, areaChartTile,
lineChartTile, timerControlTile, numberTile, textTile, highLowTile, plusMinusTile, sliderTile,
switchTile, timeTile, barChartTile, customTile, leaderBoardTile, worldTile, mapTile, radialChartTile,
donutChartTile, circularProgressTile, stockTile, gaugeSparkLineTile, radarChartTile1, radarChartTile2,
smoothAreaChartTile, countryTile, flipTile);// , weatherTile);
pane.setHgap(5);
pane.setVgap(5);
pane.setAlignment(Pos.CENTER);
pane.setCenterShape(true);
pane.setPadding(new Insets(5));
// pane.setPrefSize(800, 600);
pane.setBackground(new Background(new BackgroundFill(Color.web("#101214"), CornerRadii.EMPTY, Insets.EMPTY)));
PerspectiveCamera camera = new PerspectiveCamera();
camera.setFieldOfView(7);
Scene scene = new Scene(pane);
scene.setCamera(camera);
stage.setTitle("TilesFX");
stage.setScene(scene);
stage.show();
timer.start();
mapTile.addPoiLocation(new Location(51.85, 7.75, "Test"));
mapTile.removePoiLocation(new Location(51.85, 7.75, "Test"));
}
@Override public void start(Stage stage) {
FlowGridPane pane = new FlowGridPane(7, 5,
percentageTile, clockTile, gaugeTile, sparkLineTile, areaChartTile,
lineChartTile, timerControlTile, numberTile, textTile,
highLowTile, plusMinusTile, sliderTile, switchTile, timeTile,
barChartTile, customTile, leaderBoardTile, worldTile, mapTile,
radialChartTile, donutChartTile, circularProgressTile, stockTile,
gaugeSparkLineTile, radarChartTile1, radarChartTile2,
smoothAreaChartTile, countryTile, ephemerisTile, characterTile,
flipTile, switchSliderTile, dateTile, calendarTile);//, weatherTile);
pane.setHgap(5);
pane.setVgap(5);
pane.setAlignment(Pos.CENTER);
pane.setCenterShape(true);
pane.setPadding(new Insets(5));
//pane.setPrefSize(800, 600);
pane.setBackground(new Background(new BackgroundFill(Color.web("#101214"), CornerRadii.EMPTY, Insets.EMPTY)));
PerspectiveCamera camera = new PerspectiveCamera();
camera.setFieldOfView(10);
Scene scene = new Scene(pane);
scene.setCamera(camera);
stage.setTitle("TilesFX");
stage.setScene(scene);
stage.show();
timer.start();
mapTile.addPoiLocation(new Location(51.85, 7.75, "Test"));
mapTile.removePoiLocation(new Location(51.85, 7.75, "Test"));
}
private Scene createScene() {
Cube cube = new Cube(Color.BLUE);
snake.getChildren().add(cube);
moveFood();
root.getChildren().addAll(snake, food);
Scene scene = new Scene(root, 1280, 720, true);
PerspectiveCamera camera = new PerspectiveCamera(true);
camera.getTransforms().addAll(new Translate(0, -20, -20), new Rotate(-45, Rotate.X_AXIS));
scene.setCamera(camera);
timer = new AnimationTimer() {
@Override
public void handle(long now) {
t += 0.016;
if (t > 0.1) {
onUpdate();
t = 0;
}
}
};
timer.start();
return scene;
}
@Override
protected void animateHide(Runnable onFinishedHandler) {
if (autoCloseTimer != null) {
autoCloseTimer.stop();
autoCloseTimer = null;
}
if (NotificationCenter.useAnimations) {
double duration = getDuration(400);
Interpolator interpolator = Interpolator.SPLINE(0.25, 0.1, 0.25, 1);
gridPane.setRotationAxis(Rotate.X_AXIS);
Camera camera = gridPane.getScene().getCamera();
gridPane.getScene().setCamera(new PerspectiveCamera());
Timeline timeline = new Timeline();
ObservableList<KeyFrame> keyFrames = timeline.getKeyFrames();
keyFrames.add(new KeyFrame(Duration.millis(0),
new KeyValue(gridPane.rotateProperty(), 0, interpolator),
new KeyValue(gridPane.opacityProperty(), 1, interpolator)
));
keyFrames.add(new KeyFrame(Duration.millis(duration),
new KeyValue(gridPane.rotateProperty(), -90, interpolator),
new KeyValue(gridPane.opacityProperty(), 0, interpolator)
));
timeline.setOnFinished(event -> {
gridPane.setRotate(0);
gridPane.setRotationAxis(Rotate.Z_AXIS);
gridPane.getScene().setCamera(camera);
onFinishedHandler.run();
});
timeline.play();
} else {
onFinishedHandler.run();
}
}
@Override
protected void animateHide(Runnable onFinishedHandler) {
if (GlobalSettings.getUseAnimations()) {
double duration = getDuration(300);
Interpolator interpolator = Interpolator.SPLINE(0.25, 0.1, 0.25, 1);
gridPane.setRotationAxis(Rotate.X_AXIS);
Camera camera = gridPane.getScene().getCamera();
gridPane.getScene().setCamera(new PerspectiveCamera());
Timeline timeline = new Timeline();
ObservableList<KeyFrame> keyFrames = timeline.getKeyFrames();
keyFrames.add(new KeyFrame(Duration.millis(0),
new KeyValue(gridPane.rotateProperty(), 0, interpolator),
new KeyValue(gridPane.opacityProperty(), 1, interpolator)
));
keyFrames.add(new KeyFrame(Duration.millis(duration),
new KeyValue(gridPane.rotateProperty(), -90, interpolator),
new KeyValue(gridPane.opacityProperty(), 0, interpolator)
));
timeline.setOnFinished(event -> {
gridPane.setRotate(0);
gridPane.setRotationAxis(Rotate.Z_AXIS);
gridPane.getScene().setCamera(camera);
onFinishedHandler.run();
});
timeline.play();
} else {
onFinishedHandler.run();
}
}
public Skybox(Image singleImg, double size, PerspectiveCamera camera) {
super();
this.imageType = SkyboxImageType.SINGLE;
this.singleImg = singleImg;
this.size.set(size);
this.camera = camera;
getTransforms().add(affine);
loadImageViews();
getChildren().addAll(views);
}
@Override public void start(Stage stage) {
StackPane pane = new StackPane();
pane.getChildren().addAll(control);
Scene scene = new Scene(pane);
scene.setCamera(new PerspectiveCamera(false));
stage.setScene(scene);
stage.show();
timer.start();
}
public Viewer3DFX(final double width, final double height)
{
super();
this.root = new Group();
this.sceneGroup = new Group();
this.meshesGroup = new Group();
sceneGroup.getChildren().add(meshesGroup);
this.setWidth(width);
this.setHeight(height);
this.scene = new SubScene(root, width, height, true, SceneAntialiasing.BALANCED);
this.scene.fillProperty().bind(backgroundFill);
this.camera = new PerspectiveCamera(true);
this.camera.setNearClip(0.01);
this.camera.setFarClip(10.0);
this.camera.setTranslateY(0);
this.camera.setTranslateX(0);
this.camera.setTranslateZ(0);
this.camera.setFieldOfView(90);
this.scene.setCamera(this.camera);
this.cameraGroup = new Group();
this.getChildren().add(this.scene);
this.root.getChildren().addAll(cameraGroup, sceneGroup);
this.scene.widthProperty().bind(widthProperty());
this.scene.heightProperty().bind(heightProperty());
lightSpot.setTranslateX(-10);
lightSpot.setTranslateY(-10);
lightSpot.setTranslateZ(-10);
lightFill.setTranslateX(10);
this.cameraGroup.getChildren().addAll(camera, lightAmbient, lightSpot, lightFill);
this.cameraGroup.getTransforms().add(cameraTransform);
this.handler = new Scene3DHandler(this);
this.root.visibleProperty().bind(this.meshesEnabled);
final AffineTransform3D cameraAffineTransform = Transforms.fromTransformFX(cameraTransform);
this.handler.addAffineListener(sceneTransform -> {
final AffineTransform3D sceneToWorldTransform = Transforms.fromTransformFX(sceneTransform).inverse();
eyeToWorldTransformProperty.set(sceneToWorldTransform.concatenate(cameraAffineTransform));
});
final InvalidationListener sizeChangedListener = obs -> viewFrustumProperty.set(
new ViewFrustum(camera, new double[] {getWidth(), getHeight()})
);
widthProperty().addListener(sizeChangedListener);
heightProperty().addListener(sizeChangedListener);
// set initial value
sizeChangedListener.invalidated(null);
}
@Override
public void start(Stage primaryStage) {
Box box = new Box(100, 20, 50);
SmartGroup group = new SmartGroup();
group.getChildren().add(box);
Camera camera = new PerspectiveCamera();
Scene scene = new Scene(group, WIDTH, HEIGHT);
scene.setFill(Color.SILVER);
scene.setCamera(camera);
group.translateXProperty().set(WIDTH / 2);
group.translateYProperty().set(HEIGHT / 2);
group.translateZProperty().set(-1500);
initMouseControl(group, scene);
primaryStage.addEventHandler(KeyEvent.KEY_PRESSED, event -> {
switch (event.getCode()) {
case W:
group.translateZProperty().set(group.getTranslateZ() + 100);
break;
case S:
group.translateZProperty().set(group.getTranslateZ() - 100);
break;
case Q:
group.rotateByX(10);
break;
case E:
group.rotateByX(-10);
break;
case NUMPAD6:
group.rotateByY(10);
break;
case NUMPAD4:
group.rotateByY(-10);
break;
}
});
primaryStage.setTitle("Genuine Coder");
primaryStage.setScene(scene);
primaryStage.show();
}
private void createQubit() {
PerspectiveCamera camera = new PerspectiveCamera(true);
camera.setNearClip(0.1);
camera.setFarClip(10000.0);
camera.getTransforms().addAll(rotateX, rotateY, new Translate(0, 0, -200));
FrustumMesh plane = new FrustumMesh(50, 50, 1, 1, new Point3D(0, -0.5f, 0), new Point3D(0, 0.5f, 0));
plane.setMaterial(new PhongMaterial(Color.web("#ccdd3320")));
SegmentedSphereMesh innerSphere = new SegmentedSphereMesh(40, 0, 0, 50, new Point3D(0, 0, 0));
innerSphere.setMaterial(new PhongMaterial(Color.web("#ff800080")));
SegmentedSphereMesh frameSphere = new SegmentedSphereMesh(20, 0, 0, 50, new Point3D(0, 0, 0));
frameSphere.setMaterial(new PhongMaterial(Color.BLACK));
frameSphere.setDrawMode(DrawMode.LINE);
FrustumMesh rod = new FrustumMesh(2, 2, 1, 1, new Point3D(0, 0, 0), new Point3D(50, 0, 0));
rod.setMaterial(new PhongMaterial(Color.web("#0080ff")));
SegmentedSphereMesh smallSphere = new SegmentedSphereMesh(20, 0, 0, 4, new Point3D(50, 0, 0));
smallSphere.setMaterial(new PhongMaterial(Color.web("#0080ff")));
rodSphere = new Group(smallSphere, rod);
Group group = new Group(plane, rodSphere, innerSphere, frameSphere, new AmbientLight(Color.BISQUE));
SubScene subScene = new SubScene(group, 100, 100, true, SceneAntialiasing.BALANCED);
subScene.setCamera(camera);
subScene.setOnMousePressed(event -> {
mouseOldX = event.getSceneX();
mouseOldY = event.getSceneY();
});
subScene.setOnMouseDragged(event -> {
rotateX.setAngle(rotateX.getAngle() - (event.getSceneY() - mouseOldY));
rotateY.setAngle(rotateY.getAngle() + (event.getSceneX() - mouseOldX));
mouseOldX = event.getSceneX();
mouseOldY = event.getSceneY();
});
getChildren().add(subScene);
rodSphere.getTransforms().setAll(myRotate);
}
public PerspectiveCamera getCamera() {
return camera;
}
private void setCamera(PerspectiveCamera camera) {
this.camera = camera;
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setResizable(false);
Scene scene = new Scene(root, 1024, 800, true);
// Create and position camera
Camera camera = new PerspectiveCamera();
camera.getTransforms().addAll(
new Rotate(0, Rotate.Y_AXIS),
new Rotate(0, Rotate.X_AXIS),
new Translate(-500, -425, 1200));
scene.setCamera(camera);
scene.setFill(Paint.valueOf(Color.BLACK.toString()));
// Box
testObject = new Cylinder(10, 50);
testObject.setMaterial(new PhongMaterial(Color.RED));
testObject.getTransforms().addAll(new Translate(50, 0, 0));
TdsModelImporter model_importer = new TdsModelImporter();
model_importer.read(getClass().getResource("/models/SpaceLaunchSystem.3DS"));
Node[] nodes = model_importer.getImport();
model_importer.close();
Group rocket = new Group(nodes);
rocket.getTransforms().addAll(new Translate(0, 25, 0));
// Build the Scene Graph
root.getChildren().addAll(testObject, rocket);
primaryStage.setScene(scene);
primaryStage.show();
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
System.out.println(event);
if (event.getEventType().equals(WindowEvent.WINDOW_CLOSE_REQUEST)) {
System.exit(0);
}
}
});
mqttClient.subscribe(MQTT_TOPIC_IMU + "/#");
}
public PerspectiveCamera getCamera(){ //StackPane root) {
return camera;
}
public Parent createContent() throws Exception {
Image dImage = new Image(Simple3DSphereApp.class.getResource("/maps/earth-d.jpg").toExternalForm());
Image nImage = new Image(Simple3DSphereApp.class.getResource("/maps/earth-n.jpg").toExternalForm());
Image sImage = new Image(Simple3DSphereApp.class.getResource("/maps/earth-s.jpg").toExternalForm());
Image siImage = new Image(Simple3DSphereApp.class.getResource("/maps/earth-l.jpg").toExternalForm());
material = new PhongMaterial();
material.setDiffuseColor(Color.WHITE);
material.diffuseMapProperty().bind(
Bindings.when(diffuseMap).then(dImage).otherwise((Image) null));
material.setSpecularColor(Color.TRANSPARENT);
material.specularMapProperty().bind(
Bindings.when(specularMap).then(sImage).otherwise((Image) null));
material.bumpMapProperty().bind(
Bindings.when(bumpMap).then(nImage).otherwise((Image) null));
material.selfIlluminationMapProperty().bind(
Bindings.when(selfIlluminationMap).then(siImage).otherwise((Image) null));
earth = new Sphere(5);
earth.setMaterial(material);
earth.setRotationAxis(Rotate.Y_AXIS);
// Create and position camera
PerspectiveCamera camera = new PerspectiveCamera(true);
camera.getTransforms().addAll(
new Rotate(-20, Rotate.Y_AXIS),
new Rotate(-20, Rotate.X_AXIS),
new Translate(0, 0, -20));
sun = new PointLight(Color.rgb(255, 243, 234));
sun.translateXProperty().bind(sunDistance.multiply(-0.82));
sun.translateYProperty().bind(sunDistance.multiply(-0.41));
sun.translateZProperty().bind(sunDistance.multiply(-0.41));
sun.lightOnProperty().bind(sunLight);
AmbientLight ambient = new AmbientLight(Color.rgb(1, 1, 1));
// Build the Scene Graph
Group root = new Group();
root.getChildren().add(camera);
root.getChildren().add(earth);
root.getChildren().add(sun);
root.getChildren().add(ambient);
RotateTransition rt = new RotateTransition(Duration.seconds(24), earth);
rt.setByAngle(360);
rt.setInterpolator(Interpolator.LINEAR);
rt.setCycleCount(Animation.INDEFINITE);
rt.play();
// Use a SubScene
SubScene subScene = new SubScene(root, 400, 300, true, SceneAntialiasing.BALANCED);
subScene.setFill(Color.TRANSPARENT);
subScene.setCamera(camera);
return new Group(subScene);
}