過去の独りごち/独りごとはこちら
過去のJavaアプレットは
こちら

 

9/17 浅はか

 ん〜、昨日のについて

SXLibのピルボード、実装の方法が結構悩みどころです。
「フレームの座標→画面上の座標」なメソッドを作って、
あとはPrimitives使ってね…というのが一番スマートかなぁ…

 ダメです。そんな事したら半透明体の描画順序に破綻が生じます。…いや、厳密には半透明体の描画は元々破綻しています(^^;)、加算・減算ブレンドが行われる物体に対してまでも破綻しちゃダメなんですが。

 ともかく、

  1. SXLibが半透明体を描画
  2. Primitivesが不透明体を、「半透明体より奥に」描画

 これで破綻(^^;) 半透明体の描画は、ZCompareだけON、ZWriteをOFFにして行うので、このケースでは、SXLibによる半透明体が、奥にあるはずのPrimitivesによる不透明体に塗りつぶされる事になります。

 だから、ビルボードの描画もSXLibでやらざるを得ないんですねm(__

 さてと、

 SXLibの拡張、ようやっと半透明体と不透明体の仕分けが出来るようになりました。結構時間がかかりましたね。SXLibにかつて、レンダリングスタックと呼んでいた構造を埋め込んでいたので、少々。

 スタックというとLIFOの順に処理されるような感じがするので、実のところレンダリングキューです。要するに、メッシュとかビルボードに関する情報を押し込んでおいて、後で一気に描画してくれるようなオブジェクトの事を、ここでは指しています。

 で、不透明体・半透明体それぞれのためにレンダリングキューを用意し、

  1. ZWRITE/ZCOMPARE 両方Trueにして、 不透明体のレンダリングキューにレンダリングさせる
  2. ZWRITEだけFalseにして、半透明体のレンダリングキューにレンダリングさせる

 という順でレンダリングさせる事で、描画の順序をそれなりに正しく保つわけです。

 以前においては高速化のためのオブジェクトだったのですが、半透明体のレンダリングに便利な構造だったとは。

 …しかし、この不透明体と半透明体の描画順序をきちんとする点について、皆さんはどうやってるんでしょ。なんだか一人だけ置いてけぼりを喰らっている気もする昨今です。

 

 ビルボードの描画も出来るようになったら、サンプルをULしましょう。見世物の要素は相変わらず無いとは思いますが、そのときには是非テストにご協力くださいm(__)m

Taku Hayase(SANDMAN)

戻る