「深度バッファ」の版間の差分
Administrator (トーク | 投稿記録) 編集の要約なし |
Administrator (トーク | 投稿記録) 編集の要約なし |
||
| 13行目: | 13行目: | ||
これは擬似的なプログラミング言語である。 | これは擬似的なプログラミング言語である。 | ||
<source> | <source lang=text> | ||
// 深度バッファを準備する | // 深度バッファを準備する | ||
var depthBuffer = new DepthBuffer[w,h]; | var depthBuffer = new DepthBuffer[w,h]; | ||
| 42行目: | 42行目: | ||
* [[ステンシルバッファ]] | * [[ステンシルバッファ]] | ||
* [[カリング]] | * [[カリング]] | ||
[[category: 3DCG]] | |||
2025年5月7日 (水) 02:03時点における最新版
深度バッファ(depth buffer)とは、3DCGにおいて深度情報(Z値)を記録しておくバッファ(メモリ)のことです。これを利用することで不要な描画処理を省略することができます。 深度バッファは「Zバッファ」などとも呼ばれます。いわゆる方言であり意味は同じです。
概要[編集 | ソースを編集]
パソコン界隈では深度バッファは「0.0〜1.0」までの範囲の24ビットの固定小数点数で表されるものがデファクトスタンダードとなっています。 これはDirect3Dが標準採用した形式だったためです。 ただ24ビットでは転送効率が良くないので、8ビットのステンシルバッファを加えて、計32ビットで処理するものが多いです。
処理系によっては16ビットや32ビットの浮動小数点数を用いるものもあります。
深度テスト[編集 | ソースを編集]
深度バッファは以下のような使われ方をする。
これは擬似的なプログラミング言語である。
// 深度バッファを準備する
var depthBuffer = new DepthBuffer[w,h];
// 深度バッファは1.0で埋めておく
depthBuffer.fill(1.0);
// ポリゴンをピクセル群にラスタライズする
foreach (var pixel in polygon.toPixels())
{
// ピクセルとカメラの距離(深度)を求める
var depth = vector3.distance( pixel.position, camera.position);
// 深度を比較する
if ( depthBuffer[pixel.position.xy] <= depth )
{// 後ろなので何もしない
nop();
}
else
{// 描画と深度の記録をする
pixel.draw();
depthBuffer[pixel.position.xy] = depth;
}
}