[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
==================================================================