Java 3DはJavaで3Dグラフィックスを扱うためのJava拡張APIの一つです。 いわゆる"100% Pure Java"なライブラリではなく、FreeBSD向けのバイナリもないため、今まではFreeBSDネイティブなJavaVM上で使用することができませんでした。
この文書では、linuxpluginwrapperの技術を使ってLinux版Java 3DのバイナリをFreeBSDネイティブなJavaVM上で動かす方法を解説します。
あらかじめ入れておく必要のあるportsは x11/XFree86-4 と java/jdk14 の2つだけです。 (jdk14のかわりに java/jdk13 や java/diablo-jdk13 でも大丈夫だと思いますが、試していません。) linux_base, linux-*-jdk, linux_driなどは一切不要です。
あと、必須ではありませんが、DRI(Direct Rendering Infrastructure)を有効にしておくと大幅に描画性能を向上させることができます。 DRI on BSDのページを参考に設定してみてください。glxinfoコマンドを実行して"direct rendering: Yes"と表示されれば、DRIは有効になっています。
BlackdownのサイトよりLinux版のJava 3Dを入手します。11月30日現在、Java3D 1.3と1.3.1-betaが公開されていますが、ここでは1.3.1-beta(java3d-sdk-1.3.1-beta-linux-i386.bin)を使ってみることにします。
配布物は自己展開型のシェルスクリプトになっているので、以下のようにしてインストールすることができます。
# cd /usr/local/jdk1.4.2 # sh /path/to/downloaddir/java3d-sdk-1.3.1-beta-linux-i386.bin
linuxpluginwrapper-20031122.tar.gzにこのパッチを当ててビルドします。
% tar xzf linuxpluginwrapper-20031122.tar.gz % cd linuxpluginwrapper-20031122 % patch < ../patch-java3d.diff % make
作成されたjava3d.soとjava3da.soを/usr/local/lib/pluginwrapper/以下にインストールします。
# mkdir -p /usr/local/lib/pluginwrapper # cp java3d.so /usr/local/lib/pluginwrapper/ # cp java3da.so /usr/local/lib/pluginwrapper/
最近のFreeBSDには、/etc/libmap.confという設定ファイルにより動的ライブラリの依存関係を実行時に変更する機能が追加されています。 5.2-BETA以降ならばデフォルトで有効になっており、5.1-RELEASEでも以下のようにすることで有効にすることができます。
# cd /usr/src/libexec/rtld-elf # make WITH_LIBMAP=yes install
4-stableでもrtld-elfにこのパッチを当ててリビルドすれば/etc/libmap.confが有効になるようです。
/etc/libmap.confを有効してこのサンプルのように記述すれば、全ての準備が完了です。
Java 3Dのインストールの際、/usr/local/jdk1.4.2/demo/java3d/以下にサンプルコードもインストールされるはずです。 早速これを実行してみましょう。
% cd /usr/local/jdk1.4.2/demo/java3d/HelloUniverse % java HelloUniverse
回転する立方体が表示されれば成功です。
Java appletが有効になっていれば、mozillaなどのFreeBSDネイティブなブラウザからでもJava 3Dを利用することができるはずです。
元ネタであるlinuxpluginwrapperの製作に携われた重村さんをはじめ多くの方々に感謝致します。