この記事はJavaFX Advent Calendar 2013 15日目の記事です。
昨日は @making さんの「JavaFXからREST Webサービスにアクセスする」でした。
さて、JavaFX 8というか、Java SE 8のJavaFXでは3D対応が目玉の一つになっています。
私はまったくといっていいほど3D関連のプログラミングとかモデリングとかやったことないのですか、ある程度は理解しておかないとあっという間においていかれるのでちょっとずつやってみます。
とりあえず箱でも置いてみる...ぜんぜん見えない。
ネットで探したサンプルとかをそのままでやればそりゃ見えるんだけど、ちょっと値を変えてみるかー、とかやると途端に難しいんだけども。
で、めっちゃいろんな値をためしてみてわかってきたこと => ちゃんと見えてくれるカメラと箱の位置関係がめっちゃ狭い?
手作業で直しては実行、だと効率が悪いなーということで、TranslateTransitionでカメラの位置を動かして試してみた。(早く気付け)
@Override public void start(Stage stage) throws Exception{ Group root = new Group(); Box box = new Box(20, 20, 20); PhongMaterial material = new PhongMaterial(); material.setDiffuseColor(Color.BLUE); box.setMaterial(material); root.getChildren().add(box); PerspectiveCamera camera = new PerspectiveCamera(true); camera.getTransforms().add(new Translate(0, 0, -50)); AmbientLight ambientLight = new AmbientLight(Color.rgb(200, 200, 200, 1)); root.getChildren().add(ambientLight); Scene scene = new Scene(root, 1024, 768, Color.GRAY); scene.setCamera(camera); stage.setScene(scene); stage.show(); TranslateTransition t = new TranslateTransition(Duration.millis(2000), camera); t.setByZ(-150); t.setCycleCount(Animation.INDEFINITE); t.setAutoReverse(true); t.play(); }
まあこの値も結構な試行錯誤の結果なんだけども、んー、ちょっと距離が離れただけでいきなり消えるな。
これは何か設定とかありそう?(と、ここでやっとJavaDocを見る)
なるほど...たぶん setFarClip というやつですね。デフォルトが100と書いてある。
とりあえず
camera.setFarClip(1000);
の一行を追加して実行。やっと想像していた感じで見れた!
なんか、思いのほか数値的に少ない変化でかなり見え方が変わりますね。ぜんぜんわからんのですが、3Dだとそういうもんなのでしょうか。
画面のドットで考えるのが染み付いてしまっているのでどうしても違和感が。Clipがデフォルト100になってるってことは、やっぱりその範囲くらいで考えたりするのがスタンダード?
なんか、思いのほか数値的に少ない変化でかなり見え方が変わりますね。ぜんぜんわからんのですが、3Dだとそういうもんなのでしょうか。
画面のドットで考えるのが染み付いてしまっているのでどうしても違和感が。Clipがデフォルト100になってるってことは、やっぱりその範囲くらいで考えたりするのがスタンダード?
コメント