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

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





岸田さん、Konnoさん、こんにちは。

岸田さん、
>私の環境も同じです。
>それで、青いほうを不透明にして、回転させてみました。
>青いほうが手前に表示されているというより、赤のほうが半透明になって
>いない、多分背景の黒と混じった色になっている感じがしますね。
ちょっと、言葉で説明するのは難しいのですが、赤と青のポリゴンが
重なった部分で、「完全に」青のポリゴンしか表示されないのですが、
岸田さんの場合はちょっと違うんでしょうか?

>#OpenGLのせいかな…。
おそらく、半透明のポリゴンを描きこむときはOpenGLのZバッファを
ReadOnlyにしているのでは? と思われます(この方法はありです。
ただし、描きこむ順番を変えれば。後述します)

Konnoさん、
> OpenGLで半透明オブジェクトは、現時点の描画バッファと描画する半透明
> オブジェクトによる混合処理によって実現されている点に注意してください。
>
そのとおりですね。したがって、OpenGLで半透明オブジェクトをできる限り
忠実に表現するには、
1.不透明なポリゴンをすべて描きこむ
2.半透明なポリゴンをZバッファをReadOnlyにして描きこむ
という方法があります(この方法はImmidiateModeでは当然無理です)。
これでも、半透明ポリゴンが交差する場合は、忠実に表現できません。
さらに、もう少し高級な方法として、上記に加えてアルファプレーンを参照
する方法があります。ポリゴンを描きこむときに、Z値のみならずアルファ
値も参照して、必要ならばカラーバッファと混合処理して描きこむ、という
方法です。ただし、これでも2枚の半透明ポリゴンが描かれた状態で、その
「間に」もう1枚の半透明ポリゴンを描きこむ、といった場合は忠実に表現
できません。

速度を落とさずに、実現するにはこれぐらいまでが限度かな?と思います。

#Konnoさんは、「オブジェクト」というんですね。私も前はそうでしたが、今は
#「ポリゴン」といってます。Zバッファやスキャンラインでは、ポリゴンで問題な
#いですから。でもレイトレでは...
#やっぱり、Java3Djp MLへ入ります。

_/_/_/     E-Mail:numakura@aie-res.co.jp    _/_/_/