忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

かんたんXNA その27 ステンシル・バッファ

このページは古いです
最新版はこちら


ステンシル・バッファ

3Dの映像を描画する時には、
描画する部分を限定したい時があります。
例えば水や鏡にモデルが映りこんでいるときです。

そういうときにはモデルを鏡に対して反転してもう一回
描画するというやり方がありますが、
それでは鏡をはみ出してしまうかもしれません。

出来るなら鏡の領域の中でだけ
描画できるようにしたいものです。

あるいは物体の影を描く時も、そのように描画する
領域を制限したくなる場合があります。
影で暗くなる所だけ描画するようにして
半透明の黒で描画するのです。
(ここで言っているのは、
面が斜めになっていることによって出来る「陰」ではなくて、
他の物体によって光がさえぎられることによって出来る「影」です。)


こういったときに描画する領域を限定するために使うのが、
ステンシル・バッファです。
(ステンシルというのは、何か模様の形をした穴の開いた型があって、
そこにスプレーをプシューとやるとその模様が写るあれです。)


使い方は深度バッファやアルファ・テストに似ています。
とくに深度バッファとはかなり似ているので
ひとくくりにされることもあるくらいです。
深度バッファと同じように、各ピクセルにステンシルの値を表すデータがあって、
そのデータに基づいて描画するかしないかを制御することが出来るのです。
(ちなみに最初の値は深度バッファと違って0です。
深度バッファの最初の値は1でした。)


例えばあるモデルを四角形の中でだけ描画されるようにしたいとしましょう。
まず「型」を作るようにステンシル関連の設定をして、とりあえず四角形を描画します。
そうするとその四角形の形の「型」ができます。
四角形のそれぞれのピクセルのステンシル値が書き換えられたのです。

その後ステンシルの設定を「スプレーのプシュー」が出来るようにします。
そしてモデルを描画すると、きれいに「型」の中でだけ描画されるのです。
四角形の外には描画されません。

拍手[0回]

PR

かんたんXNA その26 アルファ・テスト

このページは古いです
最新版はこちら

XNAでは(やっぱりXNAに限ったことではありませんが)、
これから描画するピクセルの色のアルファの値によって
描画を制限することが出来ます。

たとえば、これからアルファが(255中)30以上の時しか
描画しない設定にすれば、色のアルファの値が20の三角形は
全く描画されなくなります。
アルファの値が40ならいつも通りに描画されます。

拍手[0回]


かんたんXNA間違い訂正 grahpics → graphics

どうしようもないタイポを見つけました。

どうも「かんたんXNA その18」から紛れ込んでいたようです。

GraphicsDeviceManagerの変数名が
grahpicsになっていました。
正しくはgraphicsですね・・・・・・。

うう・・・、インテリセンスに頼りすぎだったかもしれません。
気付いたのは自分で一度だけ"graphics"と打ったときです。
エラーが出てそんな変数はないと教えてくれるんですね。

そんなバカなと思って見直してみるとgraphicsが全部grahpicsになっていました!
さっそく修正します。

拍手[0回]


かんたんXNA その25 ブレンド関数

このページは古いです
最新版はこちら

物を半透明にするアルファ・ブレンディングですが、
ブレンド関数を使うことによってもっと別のことも出来ます。

アルファ・ブレンディングとはもう少し一般的にいうと、
色を混ぜる(ブレンドする)ということです。
ある混ぜ方をすると物が半透明になりますが、
別の混ぜ方をすれば別の効果が得られます。

前回では2つの色は常に足されましたが、(変わったのは係数だけ)
これは逆に引いたり、あるいは最大値をとったり、
最小値をとったりするようにも変更できます。
(そのため、アルファは単なる不透明度ではない場合だってたくさんあり、
むしろそれがほとんどなのです。)


このような、混ぜ方の関数を設定するのが
RenderState.BlendFunctionプロパティです。

拍手[0回]


かんたんXNA その24 アルファ・ブレンディング

このページは古いです
最新版はこちら

XNAでは物を半透明に描くことが出来ます。
ゼリーのように、後ろのものが透けて見えるのです。

これをアルファ・ブレンディングと言います。
不透明度(アルファ)を考慮する描画だからです。

アルファ・ブレンディングを使うには、まず

拍手[1回]