[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: [jfriends] Java3Dの混合処理




えんどうです。

> OpenGL1.1では、半透明のポリゴン(これをAとする)を描画した
> 後で、その後ろに他のポリゴン(これをBとする)を描画すると、AとBの
> 重なった部分は、Aしか表示されません(つまり半透明を表現でき
> ていない。半透明を表現するには、Bの後にAを描かなくてはならない)。

手元に OpenGL の仕様が無いのですが、glMaterial*() ではなく
glColor*() で RGBA で色指定したときですか?

それと、特定環境で実際にこうなった、ということですか?
それともこれが OpenGL 1.1 仕様なのでしょうか。

以前 Java3Djp メーリングリストで、Text2D は Z 値ではなく
シーンに追加した順番で前後関係が決まるというバグ
(OpenGLに依存した仕様)が話題になったことがあります。

> ところが、えんどうさんのサンプルでは、後ろにあるはずの青いポリゴ
> ンが前に表示されます。原因として考えられるのは、Java3Dでは通
> 常のポリゴンは、そのZ値も書き込むのに対し、半透明なポリゴンは
> Z値を書き込まないんではないか?と思っているのですが、そういう
> 仕様なのでしょうか?

ワタシの環境は、Panasonic Let's Note S51 (Neomagic)
Windows 98, OpenGL 1.1, JDK 1.2.2, Java 3D 1.1.2 (OpenGL)
Linux 2.0.36, Mesa 3.02, JDK 1.2 pre-v2, Java 3D 1.1.1 pre-v1
です。

Windows 98 で実行すると、シーンを回転させたときにも透明な物体が
正しい前後関係で描画されました。

Linux では、赤いポリゴンが不透明で暗い赤色になり、
奥の青いポリゴンは正常に描画されました。

物体の前後関係は、Linux でも Windows でも正常です。

# JavaHouse-Brewers でも、私も徳屋さんも岸田さんも
# それぞれ実行結果が異なるのではないか、
# と思えるのですが。

> #これが仕様だとするとおかしくない? OpenGLのもおかしいといえば
> #おかしいけど... 透明を正確に表現しようとすると、レイトレしかないの
> #かないのかな。 

Appearance#setMaterial(), Appearance#setTransparencyAttributes() 
を設定したあと、照明すれば正常に描画出来ると思います。

> #JavaHouseではちょっと敷居が高いので、こちらで質問させてもらいま
> #した。

よろしければ Java3Djp MLもどうぞ。

---
ENDO Yasuyuki <yasuyuki@xxxxxxxxxx>
http://www.javaopen.org/jfriends/index.html (Japanese Only)