重いコンポ>軽いコンポ(z軸的意味で)



 前回の記事で発覚したJava3Dの不具合であるが、回避策がないのか探してみた。
 大胆に「Java3Dはswingと相性が悪い」でググってみる。
 当然の如く自分のブログがトップに来たw。それはともかく、
安藤ゆきお氏のJava3DのFAQ

[Q] SwingでJava3Dは使えますか?
 
 Java3D の Canvas3D は Light-weight コンポーネントではないため、
 描画がおかしくなる場合があります。
 現時点では AWT を使うのが無難です。
 Sun (JavaSoft) は Java3D と Swing をうまく共存させるよう努力中のようです。
 考えられる方法としては、
 (1) Java3D の改良。オフスクリーン・レンダリングなどを使い、Light-weight コンポーネントの中でも Java3D が描画出来るようにする。
 (2) Swing の改良。Swing の中で Java3D のような Heavy-weight コンポーネントをうまく描画出来るようにする。
 の2通りの方法を考えているようです。(1)は描画のパフォーマンスが悪いかも知れません。

 ああ、この文読んだ記憶がある。”場合があります”って言うからたまに起こるのかと思ってナメていた。
 
2chのスレッド「【徹底討論】Java3Dの可能性について考える」

440 :デフォルトの名無しさん:04/05/14 23:44
 今からJava3Dやるなら、Xith3Dがいいかも。
 http://www.xith.org/tiki-index.php
 
446 :デフォルトの名無しさん:04/05/16 22:12
 >>444
 jGL
 http://www.cmlab.csie.ntu.edu.tw/~robin/JavaGL/index-j.html
 
 使ったこと無いけど全部Javaで書いたOpenGL実装らしい
 
451 :デフォルトの名無しさん:04/05/17 22:43
 >>441
 お互い依存はしていないんだけど、シーングラフのクラス構造がほぼ
 同じなので、どちらかを覚えればもう一方も割合楽に組めます。
 
 Xith3Dの利点は
 ・速い。ゲームを前提としているので、Java3Dに比べてパフォーマンスに優れている。
 ・Java3Dは公式といいながらも、開発はほぼストップしている(らしい)のに比べて、Xith3Dは活発に開発が進められている。
 
 でも、勉強がてらなら、日本語ドキュメントが充実してるJava3Dの方が
 やりやすいかもしれんね。
 
453 :デフォルトの名無しさん:04/05/18 00:46
 >>451
 うへぇ、Java3D、開発ストップしてるのかよ。
 SGIっていま参加してないんだっけ?
 というかSGI自体がもう3Dやってないのかな。
 
454 :デフォルトの名無しさん:04/05/18 03:56
 >>453
 止まってはいない。
 でも非常に遅い。
 かつ、JOGL等別の動きがある。
 http://www.j3d.org/

 様々な新しい動きがあるらしい。知らんかった。常に一定のリサーチを続けるべきだという教訓だな。
MSN相談箱 MenuItemがcanvasの下に潜り込む

MenuBarにMenuからMenuItemがプルダウンされるとき,canvasの下にMenuItemがもぐりこんでしまいます。
MenuItemがふつうに画面上に見えるようにしたいのですが,
どうしたらいいでしょうか。
 
私の4年ぐらい前の知識では、当時はSwingとの相性が悪いらしく
 java.awt.MenuBar
 java.awt.MenuItem
を使う方法しかなかったと思います。
しかしながら、この情報も公式には全く報告されていなかったと思いますし、関連書籍等にもこういった記載は一切ありませんでした。(赤字は管理人着色)
 
この様なこともあり、Java3D人口はすっかり減ってしまったと思います。
現状でも、AWTを使う以外に方法がないのかどうかは、残念ながら解りませんが、
とりあえず、AWTのメニューを使えばうまく良くと思います。
ご確認ください。

 また、”相性”かよ。し俺の症状と似たような症状だな。まさか俺のもswingやめてawtにすれば解決!なんじゃないだろうな?やだよそんなの・・・。せっかく統一イメージの画面になると思ってたのに・・・。awtつかったらOS毎に部品の形が変わっちゃうじゃん。
 そもそも、swingで一貫性のある表示をしたいのだから、それをAwtで書いたら、後々swingに書き直す作業が生じるだろ?それはwrite once に反するからやりたくねー。それにしても赤字の部分はひでー話だな。俺は泥船に乗っかっちまったてことかよ。
 
[http://www.javaopen.org/j3dbook/mlarchive_3/msg00152.html:title=[Java3Djp:00152] Interpolator の CPU 占有率を落とすには?]
というJava3Dメーリングリストの記事の
フォローアップ記事

上記にSwingとJava 3Dの記事があります。

SwingはLightweight Component(軽量コンポーネント)と呼ばれ、
OSの資源を使わずにJava側だけで描画します。
 
Java 3DはOS側のOpenGLDirectXを利用して描画します。
 
http://java.sun.com/products/jfc/tsc/articles/mixing/index.html
 
これらを混在させるための一般的な留意点が上記のSunの記事にあります。

というので見てみたら、
Mixing heavy and light components


 (英文でした。)

おお!これだこれ、俺の症状の一つはこれだ。上になってるはずのフレームが3D画面の下に潜り込むっての。
・・・イヤン、俺英語読めないんだけど。しょうがないなぁYahoo翻訳で、


 
 Guideline No. 3
 ガイドライン番号。 3
 
 Do not place heavyweight (AWT) components inside a JInternalFrame.
 ヘビー級(AWT)構成要素をJInternalFrameに入れないでください。

 なにぃぃぃ!?
 おいおい、どうすんだこりゃ?ここの書き方だとOSの資源を使うdirectXOpenGLもヘビー級だよな。つまりそもそも不可能なことをやろうとしてたってことかよ。
こういう大事なことは初めに言ってくれよ!


 ・・・しかしひどいなぁ。難しいんじゃなくて出来ないのかよ。ガイドラインは「入れないで下さい。」って泣けてくるわ。なになに?このページ2003年から更新されてないの?うわー、5年間も動きなしか。放置と思われても仕方ないね。こりゃJava3D改善の見込み無いわ。プラグインの選択間違ったかー。Java3Dの本とか(4200円+1900円)買ったのに・・・。無駄だったかorz。


 さて、では何を選ぶべきか・・・。

今の所の候補(どれも全く知らない)

  • Xith3D
  • jGL
  • JOGL