重いコンポ>軽いコンポ(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側のOpenGLやDirectXを利用して描画します。
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の資源を使うdirectXやOpenGLもヘビー級だよな。つまりそもそも不可能なことをやろうとしてたってことかよ。
こういう大事なことは初めに言ってくれよ!
・・・しかしひどいなぁ。難しいんじゃなくて出来ないのかよ。ガイドラインは「入れないで下さい。」って泣けてくるわ。なになに?このページ2003年から更新されてないの?うわー、5年間も動きなしか。放置と思われても仕方ないね。こりゃJava3D改善の見込み無いわ。プラグインの選択間違ったかー。Java3Dの本とか(4200円+1900円)買ったのに・・・。無駄だったかorz。
さて、では何を選ぶべきか・・・。
今の所の候補(どれも全く知らない)
- Xith3D
- jGL
- JOGL