軽量かもしれない輪郭抽出(自信なくなってきた

えと、ポリゴンモデルから輪郭を抽出して表示するのに、とっても楽チンな手法として、拡大したモデルの上から普通のサイズのモデルを描画すると、残った拡大ぶんが輪郭として残るよ、ってのがあったわけです。ただ、こいつは半透明に弱そうだったのでした。

ちうことで、実はまだまだポピュラーな手法に挙がる(らしい)のが、ステンシルバッファを併用する手法。ステンシルバッファ自体は昔からある技術で、ステンシルってのは「型抜き」のことを云うみたい。

スクリーン上にビットマップ的なバッファを取っておいて、モデルを書き込んだ部分にフラグを立てておく。次にモデルを描く時には、そのバッファを避けて描画するようにすると、あたかも型を抜かれたみたいにモデルが表示される、というもの。実際はフラグの立て方とか避け方を色々に設定できるので、詳しくは調べてみてください。

こいつを輪郭描画に適用すると、1.まず普通のモデルを描画する。この時、描画したピクセル(の位置)をステンシルバッファに入れておく。2.次に拡大して輪郭線色で塗りつぶしたモデルを上から表示する。この時に、ステンシルバッファに入っているピクセルについては描画しない。3.先に描画したモデルの部分を避けて、輪郭の部分が塗りつぶされて描画される。めでたし、めでたし。…という具合。

これは、輪郭線用のモデルについては余計な部分は描画しないわけなので、半透明でも大丈夫そうですね。やった!

なんだけど、次に別のモデルを表示する際に、前回使ったステンシルバッファが残っているのでさらに型抜きされて表示されてしまう。これはまずい。ただ、モデルを表示する毎にバッファをクリアしていたのでは、640*480とかあるスクリーンを覆う大きなバッファなわけだから、コストが大きすぎる。速度に影響が出る!困った!

てなのをどうするか、次回で終わりたい。