忍者ブログ

Memeplexes

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

かんたんXNA その23 深度バッファ関数

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

さて、深度バッファとは物体の前後関係から
適切に描画するためのデータでした。

カメラからの距離がより小さいときには描画し、
より大きいときには描画しないのです。

こうすることによって近くにあるものは遠くにあるものを隠し、
遠くにあるものは近くにあるものに隠されるのです。

実はこの挙動は変更することが出来ます。
例えば全く逆、カメラからの距離がより大きいときには描画し、
より小さいときには描画しないということができます。

近くにあるものは遠くにあるものに隠れ、
遠くにあるものは近くにあるものを隠すことが可能となるのです!!
(そんなことをして何が楽しいのかは知りませんが)

拍手[0回]

PR

かんたんXNA その22 深度バイアス

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

3DCGには"z-ファイティング"という現象があります。
カメラからの距離があまりにも同じような物体が2つあると、
深度バッファの計算が狂って(丸め誤差などが原因だそうです)
描画がおかしくなります。

zFighting2.jpgzFighting.jpg

これは、同じ平面上に2つの三角形を重ねてクルクルと回転させて表示したものです。
なんだか縦にギザギザしているのがわかると思います。
これが"z-ファイティング"です。

これが問題になるのは、物が隠れて出来る"影(シャドウ)"を描画するときなどです。
戦闘機が太陽光をさえぎって地面に影を落とすとすると、
地面を表すポリゴンと影を表すポリゴンが重なることになります。
すると、このような変なギザギザが発生してしまうことがあるのです。

この問題を解決する方法のひとつとして、深度バイアスがあります。
深度が同じならプラスαの情報を使って
どっちのポリゴンが前か決めればいいのです。

拍手[0回]


かんたんXNA その21 深度バッファへの書き込みの無効化

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

前回は深度バッファそのものを無効化しましたが、
深度バッファのチェックはそのままに、
書き込みだけを無効化することも出来ます。

書き込みを無効にすると、
深度バッファそのものを無効化したときのように
やはり奥の物が手前のものより前に描画されてしまいます。

深度が記録されなくなって、どの物体が手前に、
どの物体が奥にあるのかわからなくなるからです。

しかし使いようによっては変わったこともできます。
深度バッファそのものは有効なので
半透明のビームなどを描きたいときには
壁に隠れてかつ、ビーム同士では半透明で隠れない
といったことができます。

拍手[0回]


かんたんXNA その20 深度バッファ

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

3Dグラフィックスでは、奥にある物体は手前にある物体に
隠されなければなりません。

例えば、壁の向こうに敵がいる場合、敵は壁に隠れて見えません。
(当たり前です!)

XNAではこのことを特に気にする必要はありません。
ふつうに描画するだけで自動的に奥のものが隠れてくれます。

depthBufferEnabled.jpg
(奥に赤い三角形、手前に青い三角形があります。
奥の三角形は手前の三角形に隠れています。)

拍手[0回]


かんたんXNA その19 マテリアル

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

物の色はライトの色だけで決まるわけではありません。
真っ黒いものは赤い光が当たろうと緑の光が当たろうと
青い光が当たろうと白い光が当たろうと
黒です。

緑の葉っぱに白い光を当てると、
反射する光は白ではなく緑です。

どういうことかというと、
物の見かけの色はライトの色だけでなく、物そのものの色にも影響される
といういことです。
物体にどんな光が当たるかということだけではなく、
それがどれだけ物体によって跳ね返されるかにも影響されるのです。

この「物そのものの色」をマテリアルといい、

拍手[0回]