月別アーカイブ: 2013年7月

Java Web ☆★☆★☆★t!

スタートしちゃうぞーーーー!
やっと、Java Web Startで3DアプリがDeployできた。
↓ここをクリックすると起動できる。

http://kekkouyakan.webcrow.jp/jmeapp/viewer20130722.jnlp

アプレットに比べて簡単だった。もうアプレットなんかやんねーーー!!
まだこのアプリ自体は完成度が低く、ESCキーを押すとフリーズするので注意!

次はこのアプリの完成度をもうちょっとあげて、公開しよう。
この変更で、JNLPファイルの内容を確認できれば、特にここで記すことは何も無い。

アプレットができねえ

とりあえず、Swingで作ったJME (jMonkeyEngine)のアプリだが、アニメーションまで実装できて順調だったが、アプレットで頓挫した。JApplet拡張クラスさえ作れば後は余裕のよっちゃんだと思ってたんだけどなあ。

まず、Ubuntu限定かは知らないけど、LinuxではJDK(JRE)をインストールしてても、アプレットが正常に動作しない。Javaプラグインに問題があるようだ。なんかWebを色々検索して模索してたらいつの間にか直ってた。どういう対策したかは忘れてしまったので省略。もともとインストールしてたOpenJDKじゃなくて、OracleJDKをインストールしたのが良かったのかもしれない。(OpenJDKってバグがけっこう目について、あまり信用できないんだよねえ。)
といっても、対策してもFirefoxでしかアプレットが動作しなくて、Operaでは結局動作できてない。

次に、アプレットをアップロードする先のサーバの選定にも苦労した。当初はFC2でやろうと思っていたが、ftpにログインできねー。なんかよくわからん。FC2以外で他に2、3個試したが、アップロードしても全く表示されなかったりなかなか思うようなサーバがみつからなかった。学生時代はジオシティーズで気軽に出来たけど、まー、あれはちょっとヤボな事情があって却下。結局、webcrowというところで今は落ち着いている。
http://www.webcrow.jp

最後に、今回解決できなかったのがアプレットのセキュリティ制約だ。なんかjarsignerというツールを使ってjarファイルにオレオレ署名とかはいいんだが、それでもセキュリティ制約でエラーが起きる。アプレットだからローカルファイルにアクセスしないように配慮して作ったのだが、OpenGLという技術でGPUにアクセスするようなアプリのためなのか、原因不明のセキュリティエラーが出る。

JMEはLWJGLというOpenGLライブラリをベースにしており、そこによれば、Applet Loaderというユーティリティを使えと書いてはあるのだが、、。
http://www.ninjacave.com/appletloader
ちなみに、某所で有名なゲーム「Minecraft」もこのLWJGLを使っているようで、検索してるとMinecraftのページがよくヒットしてた。

そのApplet Loaderを使っても相変わらずエラーが出る。しかもappletviewerのローカルで出てくるエラーと、サーバ上に置いてあるアプレットのオンラインなエラーもなんか種類が違っていて、もうお手上げ状態。
泣きそうなので、アプレットはちょっとあきらめようと思う。

代わりに、次はJava Web Startとかいうのを試してみる。この技術はなんかコッソリとPCにプログラムをインストールされている感じがあってあまり好きじゃなかったりするのだが、ブラウザから一回のクリックで即起動するというのはやはり魅力的だ。

ウォラッシヤアアアラアアアアアッ(Swingの巻)

室伏参考URL
http://museru.digi2.jp/g03/g03.html (まんなか辺り)

JME(jMonkeyEngine) SDKのデキがイマイチだ、、。CustomControl系を編集すると、SDKがバグって深刻な編集不能状態に陥ることが多々あり、ちょっと迂闊にSDKでCustomControlに手を出すことが出来ない。あと、衝突判定の設定等ももう少し視覚的、直感的にできるかと思っていたが、なんか無理そうね。

かといって、JMEのライブラリの方はイイデキだし、他に代替もないので、SDKを棄てる訳にもいかない。SDKのバグ修正や機能追加は気が重いので、その穴を埋めるツールを自分で作るしかないなと思った。

そこで欠かせないのがJavaの標準GUIプラットフォームであるSwing。公式ページでもこちらでSwing実装の方法が記されている。
http://hub.jmonkeyengine.org/wiki/doku.php/jme3:advanced:swing_canvas

これに従って実装したのがこちらのソースです。

これで、デフォルトの画面をSwingキャンバスで表示することが出来た。いつもの画面解像度を聞いてくるダイアログボックスも出てこないのでサクサクでいいね。

とりあえず、これをさらに改造して、今までBlenderで作ったモデルを表示し、アニメーションさせ、Appletにするのが、次の目標。

NetBeans起動時に自動で前のプロジェクトを開かない方法

JME(jMonkeyEngine) SDKのベースとなっているNetBeansは起動すると、いつも前回のプロジェクトを自動で開く機能になっている。この機能は貧弱なマイPCには重くなる原因で、いつもパス指定でコマンドラインから起動する自分には余計なお世話的にイラナイ機能なので、解除する方法を探していた。その解除方法を見つけたのでメモ書き。

ここによると、プロジェクトをすべて閉じてホームディレクトリの
.netbeans\6.7\config\Preferences\org\netbeans\modules\projectui.properties
を読み取り専用にすればOKなのだそうな。

JME SDKはパスがちょっと違うが、ここをイジればイケる。
.jmonkeyplatform/3.0RC2/config/Preferences/org/netbeans/modules/projectui.properties

まー、警告ダイアログボックスが出てくるようになってちょっとウザイが、正式に解除する方法がないので、こういう方法しかないんだろうな。

J3OとXMLExporter/Imporer

ひさびさの更新。

3DCGArtsというCG投稿サイトで7/28に開催される獣人祭の出品作品作ってました。
http://www.3dcg-arts.net/member/5289

これが終わると、JME(jMonkeyEngine)のSDKのドキュメントや動画を観てSDKに付属するツール、SceneExplorerやTerrainEditorをいじったりしてた。

で、このSDKの一部であるSceneExplorerなどでは、J3Oファイル(Blenderから出力し、最終的にはJMEに最適化されたファイル)を視覚的に直感的に編集することが出来るのだが、これらはすべてマニュアル操作で行うものだ。

マニュアル操作は再編集が非常に手間がかかる。例えば、編集中のJ3Oファイルの元となったBlenderファイルをBlenderで再編集した場合、その変更点を反映するためにJ3Oファイルに変換すると、マニュアル編集したデータはすべて消えてしまうので、再び同じマニュアル編集を行わなければならない。

マニュアル編集は最初の一度ならいいが、何度も繰り返すとめんどくさいし、間違いなどが紛れ込む恐れもある。だから、これらを防ぐために自動処理でできることはなるべく自動処理に任せるような仕組みを作る必要がある。

これらを実現する第一歩として、以前、BlenderファイルからOgreXMLに変換、OgreXMLからJ3Oファイルに変換する処理を自動化する仕組みを作った。

今回はそれをさらに進めて、J3OファイルをXMLへ出力、逆にXMLからJ3Oファイルに変換する処理を実装した。ソースコードはこちら。以前のOgreXMLからJ3Oへ変換する処理とマージしている。これらの処理はJME APIの提供するXMLExporterとXMLImporterがあれば苦無く実装できる。

で、今回の新機能が実際に役に立つかはまだよく分からない。今回作ったツールを利用して、マニュアル操作する前と後のJ3Oファイルからパッチファイルを作り、そのパッチが正確に反映するような仕組みを今考えているところだ。

以前、XQueryUpdateというXML技術のアプリ、xqillaをインストールしたのだが、あれが使えるといいのだが。
http://xqilla.sourceforge.net/HomePage

ちなみに、JME SDKの右クリックメニューにTools > Diff patchみたいな項目があるが、ここでいうパッチというのは完全にdiffツールのパッチ機能だ。テキストファイルしか扱えないのでバイナリファイルのJ3Oファイルは対象外である。もともとdiffのパッチ機能ってその仕組みからしてちょっと懐疑的なのであまり使う気は無いのだけど。