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

[jfriends] Re: Java3Dの混合処理




Numakuraさん、こんにちは (^ ^)

> そのとおりですね。したがって、OpenGLで半透明オブジェクトをできる限り
> 忠実に表現するには、
> 1.不透明なポリゴンをすべて描きこむ
> 2.半透明なポリゴンをZバッファをReadOnlyにして描きこむ
> という方法があります(この方法はImmidiateModeでは当然無理です)。
> これでも、半透明ポリゴンが交差する場合は、忠実に表現できません。

OpenGLでの透過オブジェクトの処理方法として、このような手順が代案として
示されていますが、空間が多くの透明オブジェクトで構成されている場合には
この方法では、ちょっと苦しくなってしまいますよね。

そこで、代案として ........

Java3Dを透明オブジェクトを考慮してOpenGLで実装する場合には、現時点の
視点位置から、例えばShape3Dノードなどの単位でソートして、レンダリング
キューで順番に処理するのが、レンダリング破綻を回避する簡便な方法の
一つだと思います。

#もっともOpenGLのようなステートマシンでJava3Dのシーングラフを処理するには、
#現在の実装のようにシーングラフを順番に走査して処理するのが、速度的には
#最善なんですけどね ......


>View view = universe.getViewer().getView();
>view.setDepthBufferFreezeTransparent(false);
>
>#あー、すっきり。でもデフォルトがこれでいいのかな?

Java3Dの仕様を見ていると、以下のようなレンダリング属性の仕様追加が提案されて
いるようです。

    http://java.sun.com/products/java-media/3D/1_2_api/changes/blend_modes.html

意図としては、ユーザー側で透過オブジェクトを細かく制御できるようにとの配慮なん
でしょうが、シーングラフAPIの仕様としては何ともお粗末な感じがしてしまいますね (^ ^;)

-----------------------------------------------
Satoshi Konno (今野 賢)
http://www.cyber.koganei.tokyo.jp
skonno@xxxxxxxxxx