[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Java3Djp:00821] Re: About offscreen image
■■■■■■■■■■■■ 転職紹介@xxxxxxxxxx ■■■■■■■■■■■■
■■■ ■■■
■■■ 元気な会社が、あなたの能力を求めています ■■■
■■■ パーソネルまでご相談ください ■■■
■■■■■■■■■■■ http://www.perso.co.jp ■■■■■■■■■■■
小原@カーネル です。
遠藤さん、小池さん、とても有用な情報をありがとうございます。
---------- [Java3Djp:00816]より ----------
> http://java.sun.com/products/java-media/mail-archive/3D/2158.html
> http://java.sun.com/products/java-media/mail-archive/3D/2157.html
> http://java.sun.com/products/java-media/mail-archive/3D/3620.html
> http://java.sun.com/products/java-media/mail-archive/3D/3615.html
早速確認してみたのですが、確かに404 not foundで残念ながら記事を
取得することができませんでした。
---------- [Java3Djp:00817]より ----------
> 私もpostSwap内でreadRasterによってイメージを取得していますが、
> 一つ問題があります。
>
> 取得したイメージに、Canvas3Dの上にあるもののイメージも
> 含まれてしまうのです。つまり、上にかぶっているダイアログが
> あれば、それが含まれてしまいます。java3d-interest MLを見て
> いると、どうやってイメージを得るのか? という質問は時々
> あるものの、同じ問題を見かけたことがありません。
>
> どなたか、postSwap()でラスターイメージを取得している方、
> この現象が起きるかどうか、試してみていただけませんか?
こちらでも同様の現象が起きています。
何種類かのグラフィックスカード&ドライバ、OS(Windows NT, Solaris)
で試してみたのですが、いずれの場合も結果はほぼ同じでした。
イメージの上にダイアログなどが重なってしまっているとき、
デプスバッファは正確に取得できるのですが、カラーバッファは
まさに実画面に表示されているものそのものになってしまいます。
Java3D仕様なのでしょうか?
私は現在、イメージの上に他のダイアログなどの他のオブジェクトを
重ねない、スクリーンセーバを働かせない、などという原始的な手法で
この問題を回避しています。
---------- [Java3Djp:00819]より ----------
> 画面が更新される前なのに、更新後の絵が得られる、ということで
> しょうか。もし逆に、更新前の絵が得られてしまうということなら、
> ちょっと原因に心当たりがあります。
ご指摘通り、更新前のイメージを取得してしまうことが問題に
なっています。
> > The 1.1.* implementation has a known problem that a single change to the
> > scene graph can cause 2-4 renders on a canvas. These are seperate frame
> > renders each time, so you would see 2-4 postSwap() calls. You should
> > not see 2-4 postSwap() calls for each frame.
> >
> > Doug Twilleager
> > Java 3D Team
>
(〜 中略 〜)
> ちょっと試してみたのですが、Canvas3DのstopRenderer()を呼んで
> レンダリングをとめておき、startRenderer()を呼んでやると、
> ただそれだけで3回程度のpostSwap()が呼ばれました。
こちらでも、一度のシーングラフの更新で必ず複数回レンダリングが
行われる現象が発生しており、ずっと不思議に思っていたのですが、
こういうことだったのですね。
今私が作っているアプリケーションでレンダリング回数をあらためて
確認してみたところ、確かに一度の更新で2回〜4回のレンダリングが
行われていました。2回は非常にまれで、大体が3回または4回です。
> ということで、postSwapの呼ばれるタイミングがスワップの前と
> いうことではなく、古い内容の絵が作りなおされて、実際に
> 画面に書かれているということかもしれません。新しい絵の
> 情報が完成する前から、レンダリングループが回り出して
> しまうということでしょうか。
>
> そうだとすると、ちょっと美しい解決がむずかしいような気が
> します。なんとか、最後のレンダリングかどうかを知れれば
> いいのですが。
なるほど。最後のレンダリングかどうかを知る術はちょっと思い
つかないですね。おっしゃる通り、現時点では正当な解決法はない
かもしれません。とりあえずは、完全にこの問題から回避できる訳
ではありませんが、postSwap()の回数を数えるという手法をとって
みようと思います。
==================================================================
株式会社カーネル PHONE 0298(57)7457 FAX 0298(57)7458
小原 一太朗 E-MAIL kernel@xxxxxxxxxx
==================================================================