Duke を歩かせてみた。 JavaFX 3D アニメーション

JavaFX

今年の JavaOne でチェスの駒に扮した Duke が格好良く歩いていた。

JavaFX 3D テクノロジーを駆使したデモアプリケーションが披露されて会場をわかせていた。

とても素敵だったが Maya と言う高価な 3DCG ソフトと 3DViewer (何故か今は動かないらしい)を使って作られているらしい。(未確認です。)

ネット上にも 3D アニメーション作成のチュートリアルやサンプルもまだ見当たらない。

とは言え、JavaFX 8 には標準で 3DAPI が実装されているので近い将来目にすることもあるだろう。

でも、新しい物好きの私は待ちきれないので手探りでグリグリしてみた。

日本語での情報は下記サイトが解りやすくて良いですね。

JavaFX 3Dを理解する

カメラの円軌道のさせ方は非常に参考になりました。(^^)

// 感謝のコード
IntStream.rangeClosed(1, 1_000_000).forEach(i -> {
    System.out.println(“Thanks!”);
});

現在ネット上にある情報をあちことからかき集め、ちゃんと読めない英語の API ドキュメントを格闘しながら Duke を歩かせることに成功した!

サブシーン用のカメラの設定を

PerspectiveCamera subCam = new PerspectiveCamera(true);

とすることによって、確実に座標位置を把握することに成功した。(たぶん・・・)

JavaOne と同じことはできないがボードの上を Duke が落ちないように行ったり来たり歩かせることにした。

今回は前回使っていたプログラムをカメラの設定変更によって少し変更し、

モデルも自前で用意した。

メタセコイアというリーズナブルな 3DCG ソフトを使用して作りました。

ただ、後で解ったことだけど今は Blender という 3DCG ソフトが人気らしい。

Blender は比較的新しい参考書も出ているし、雑誌やムックでも取り上げられてる機会が多い。

メタセコイアは人気はあるけど新しい参考書や雑誌は見ないですね。

どちらにしろ不器用な私には使いこなせません。(>_<。)

話を核心に戻して、3D アニメーションアプリを作るのに必要なものを考えてみました。

まず、手足が動かせる Duke のモデル。

これはパーツを分けてそれぞれ Timeline を使ってアニメーションさせてみました。

次に、チェスボード。 といってもそれらしきものでいいのでこれも簡単に済ませました。

あとはこれらをジムさんが作られた JFX3DModelImporters を使わせていただきインポートします。

後は座標位置を調べて AnimationTimer を使いアニメーションさせています。

ボードから落ちないようにターンさせてます。

ターンの部分も Timeline を使ってます。

こんなに AnimationTimer や Timeline を使って問題ないのかなって思ったりもしますが動いてます。( ̄。 ̄;)

ひたすら行ったり来たしするだけの面白みの無いアプリとなってます。

これでは寂しいので音楽を流すことにしました。

ちょっと画面も寂しいので DUKE WALK と文字オブジェクトモデルも作って追加しました。

せっかくだからこれも動かしたくなりますよね。

オーディオスペクトラムリスナーを実装して文字数の文だけ 0.01 秒ごとにサンプリングしてそれをもとに適当にスケーリングさせて賑やかにしました。

以上、非常にシンプルに作ることができました。

ただ、影を映す方法が解らなかった。

JavaOne のデモも影は無いように見えるので現時点では無理なのかもしれない。

これでも私的には Complete Success! (^^)

完全版の動画は次になります。各種カメラ操作による写り方が理解できます。

それではこのプログラムを載せておきます。

プログラムの詳しい内容は説明しませんが何をやっているかだいたい解るようにコメントをいれてあります。

特に複雑なことはしてないので解らないことはないでしょう。

注意して欲しいのは、まだ JavaFX 触り初めて間もない私があちこちからかき集めた情報と英語の API ドキュメントとにらめっこしてたぶんこれでいいのだろうと作ったものだということです。

間違いがあれば御教示いただければ幸いです。

 

Hatena タグ: