Java8にはJavaFX8が入ってるんですって奥さん。何がなんだかよくわからないJavaFXだがとりあえず3Dができるらしいことはわかった。まずは自家製戦車を描画してみる。下記モデル読み込みライブラリのリンクからDownloadの項目にある[download]リンクからダウンロードを行ったファイルに含まれているjimColModelImporterJFX.jarを取り出しプロジェクトやらクラスパスやらに追加しておく。また下記d-kami特製自家製戦車の中身(.daeや.jpg)をソースコードと同じフォルダに突っ込んで準備完了。一応スクリーンショットも載せておく。
自家製戦車: http://d-kami.net/download/tank.zip
モデル読み込みライブラリ: http://www.interactivemesh.org/models/jfx3dimporter.html
あとはソースコードを載せるのみ。パッケージは指定してないので、好きな名前を入れておいてください。ファイル名はとりあえずTank.javaで
import javafx.application.Application; import javafx.scene.Node; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.PerspectiveCamera; import javafx.scene.paint.PhongMaterial; import javafx.scene.paint.Color; import javafx.scene.transform.Rotate; import javafx.scene.transform.Translate; import javafx.stage.Stage; import com.interactivemesh.jfx.importer.col.ColModelImporter; public class Tank extends Application { @Override public void start(Stage stage) { Group tank = new Group(); loadModel(tank, "tankbody.dae"); loadModel(tank, "tankc.dae"); tank.getTransforms().addAll(new Rotate(45, Rotate.Y_AXIS), new Translate(0, -50, 200)); PerspectiveCamera camera = new PerspectiveCamera(true); camera.setFieldOfView(60.0); camera.getTransforms().addAll(new Translate(0, -200, -400)); camera.setFarClip(1000); Scene scene = new Scene(tank, 800, 600, true); scene.setCamera(camera); stage.setScene(scene); stage.setTitle("Tank"); stage.show(); } private void loadModel(Group parent, String fileName){ ColModelImporter importer = new ColModelImporter(); importer.read(fileName); parent.getChildren().addAll(importer.getImport()); } public static void main(final String... args) { launch(args); } }
JavaFXで3Dやってる人向けだとすると説明するところはColModelImporterぐらいだと思うが、ファイルを読み込んでgetImportするとNodeの配列が返ってくるので、それをGroupに追加していけばよいらしい。私がまだわかってないのであまり説明できないが、Cameraの位置は変えられてもターゲット自体は変えられなさそう?lookupは別の目的で使うらしいし