Я пытаюсь анимировать сферу, вращающуюся вокруг другой сферы, однако сфера впереди не перемещается за секунду, когда ее координата Z становится меньше.
например (0,0,1) и (0,0, -1) оба появляются перед (0,0,0) Просто их размеры различаются в зависимости от перспективы. Не уверен, как это исправить или что я делаю неправильно, новичок в Java FX!
public class Main extends Application {
private static final int WIDTH = 1280;
private static final int HEIGHT = 720;
Planet earth = new Planet("Earth",50,0,0,0);
Planet earth2 = new Planet("Earth 2",50,25,0,50);
public void start(Stage primaryStage) throws Exception {
Group group = new Group();
group.getChildren().addAll(earth,earth2);
PerspectiveCamera camera = new PerspectiveCamera();
Scene scene = new Scene(group, WIDTH, HEIGHT);
scene.setFill(Color.BLACK);
scene.setCamera(camera);
camera.setNearClip(0);
camera.setFarClip(1000);
camera.setTranslateX(-WIDTH/2);
camera.setTranslateY(-HEIGHT/2);
camera.setTranslateZ(-1000);
primaryStage.setTitle("3D Scene");
primaryStage.setScene(scene);
primaryStage.show();
timeline();
}
public static void main(String[] args) {
launch(args);
}
private void timeline(){
final long start = System.nanoTime();
double FACTOR = 1;
new AnimationTimer(){
@Override
public void handle(long now) {
double t = (now-start)/1000000000.0;
//System.out.println(t);
//earth2.setTranslateX(150*Math.cos(t));
earth2.setTranslateZ(150+500*Math.sin(t));
earth.setPosition(0,0,0);
System.out.println(earth2+" | "+earth);
}
}.start();
}
}
public class Planet extends Sphere {
private String name;
public Planet(String name, double radius, double x, double y, double z){
super(radius);
setPosition(x,y,z);
this.name = name;
}
public void setPosition(double x, double y, double z){
setTranslateX(x);
setTranslateY(y);
setTranslateZ(z);
}
public void move(double x, double y, double z){
translateXProperty().add(x);
translateYProperty().add(y);
translateZProperty().add(z);
}
@Override
public String toString() {
return "["+name+"] - ("+getTranslateX()+","+getTranslateY()+","+getTranslateZ()+")";
}
}
Результат: