プロジェクト

全般

プロフィール

ダウンロード (2.96 KB) 統計
| ブランチ: | タグ: | リビジョン:
29192059 torutk
import javafx.application.Application;
2f3bf69b torutk
import javafx.animation.Timeline;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
685d257b torutk
import javafx.scene.AmbientLight;
29192059 torutk
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
38b62b0a torutk
import javafx.scene.PointLight;
29192059 torutk
import javafx.scene.Scene;
5775a464 torutk
import javafx.scene.image.Image;
29192059 torutk
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Sphere;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;
2f3bf69b torutk
import javafx.util.Duration;
29192059 torutk
public class Hello3d extends Application {

2f3bf69b torutk
private final Image earthImage = new Image(
getClass().getResourceAsStream("physical-free-world-map-b1.jpg")
);

// TODO: あとでクラス化する
private final Rotate cameraRotateX = new Rotate(0, Rotate.X_AXIS);
private final Rotate cameraRotateY = new Rotate(0, Rotate.Y_AXIS);
private final Rotate cameraRotateZ = new Rotate(0, Rotate.Z_AXIS);
e08c84bf TAKAHASHI,Toru
private final Translate cameraTranslate = new Translate(0, 0, -200);
5775a464 torutk
29192059 torutk
@Override
public void start(final Stage stage) {
final Group root = new Group();

// 球体の定義
final Sphere earth = new Sphere(100);
root.getChildren().add(earth);

a87c4319 torutk
// 材質の定義
2f3bf69b torutk
final PhongMaterial material = new PhongMaterial();
material.setDiffuseMap(earthImage);
earth.setMaterial(material);
a87c4319 torutk
29192059 torutk
// カメラの定義
2f3bf69b torutk
final PerspectiveCamera camera = new PerspectiveCamera(true);
camera.setFieldOfView(60);
camera.setFarClip(1000);
camera.getTransforms().addAll(
cameraRotateX,
cameraRotateY,
e08c84bf TAKAHASHI,Toru
cameraRotateZ,
cameraTranslate
2f3bf69b torutk
);

// 点光源の定義
final PointLight pointLight = new PointLight(Color.WHITE);
pointLight.setTranslateX(500);
pointLight.setTranslateY(0);
pointLight.setTranslateZ(-500);
root.getChildren().add(pointLight);

// 環境光の定義
final AmbientLight ambientLight = new AmbientLight(Color.rgb(80, 80, 80, 0.5));
root.getChildren().add(ambientLight);

final Scene scene = new Scene(root, 800, 600, Color.BLACK);
scene.setCamera(camera);

// アニメーション定義
e08c84bf TAKAHASHI,Toru
// カメラを0度から-90度まで回転させる
// 次にZ軸に沿って-200固定で移動させる
2f3bf69b torutk
final Timeline animation = new Timeline();
animation.getKeyFrames().addAll(
new KeyFrame(Duration.ZERO,
e08c84bf TAKAHASHI,Toru
new KeyValue(cameraRotateY.angleProperty(), 0)
2f3bf69b torutk
),
new KeyFrame(Duration.millis(3000),
e08c84bf TAKAHASHI,Toru
new KeyValue(cameraRotateY.angleProperty(), -90)
2f3bf69b torutk
)
);

stage.setScene(scene);
stage.setTitle("Hello JavaFX 3D World");
stage.show();
root.setOnMouseClicked(event -> animation.play());
29192059 torutk
}

public static void main(final String... args) {
2f3bf69b torutk
launch(args);
29192059 torutk
}
e08c84bf TAKAHASHI,Toru
}