java3d 1.5が出たし、そろそろ使い物になるかなと触ってみた。
モデルつくるのが大変なので、まずはmqoをロードできるか挑戦。
java3dとmqoでググるとlg3d関係の人が2005年頃に頑張ってたっぽい。
でも、まだ未公開みたい。
レンダラーまで作ったスゴイ人(Caffiさん)発見。
でも、java3dのシーングラフとしては読み込めないっぽい。
しょうがないので、ちょっと作ってみるか。と言うのが動機。
私ももとがしさんのグラドリエル王女使わせてもらいます。

中略で、さくっとmqoローダ作ってみた。
参考資料はMetasequoia ファイルフォーマット。とCaffi’s Diaryのエントリ。
ソースはこちら mqoview20070717.zip
問題は透過ビットマップ。
以下のコードで透過を有効にすると、ZOrderがぐちゃぐちゃになる。
tAppearance.setTransparencyAttributes(new TransparencyAttributes(TransparencyAttributes.BLENDED, 1.0f - tColor.z));
こんな感じで剣の刃がお尻より手前に描画されたり。
java3dのバグっぽいんだけど。僕の環境だけかなぁ。
そして、テクスチャ貼った面に陰が落ちないorz
ロード方法がおかしいのかなぁ・・・。
Google先生に聞いてみたところ
こんなML発見。2001年ですか。
http://www.mail-archive.com/java3d-interest@java.sun.com/msg13493.html
ふむふむ。View.setDepthBufferFreezeTransparent()で”screw up the Z-buffer”機能を無効化しろとな。
this.mUniverse.getViewer().getView().setDepthBufferFreezeTransparent(false);
直ったっぽいが、今度は額に穴が空いてしまった。

下から覗いても穴がないところを見ると、透過ビットマップを貼った面に隠れた面がカリングされちゃってる?

MLにあるdepth-sorted transparencyが気になるので試してみる。
this.mUniverse.getViewer().getView().setTransparencySortingPolicy(View.TRANSPARENCY_SORT_GEOMETRY);
としてみたものの効果無し。
別のMLではTRANSPARENCY_SORT_GEOMETRYがバウンディングボックスに依存していると言う情報が。
mqoからロードしたシーングラフはmqoのObjectチャンクとShape3Dを1:1対応させているので、バウンディングボックスもひとつだけ。効果は期待できないか。トホホ。
追記
バウンディングボックス増やせば良いなら、Objectチャンク増やせばいいやん。ということで、mqoの方を弄って対処してみた。
前髪と王冠を別オブジェクトにすると・・・。

うん。うまく透過してる。



