>ゲームを作っていると、画像の重なる部分が出てきます。背景があり、その上にキャラクターの画像があり、その上にアイテムの画像があったりします。遠景があり、キャラクターより後ろの景色があり、アイテムがあり、キャラクターがあり、エフェクトがあり、近景があり、ステータスウインドウがあり・・・という状況になります。パソコンの性質上、後から描画したものが上に描かれるため、下に描画したいものから順に描画していくというルールになります。下の図で言うと、ピンク、水色、黄色の順で描画することになりますね。これが縄文時代に一般的だったゲームプログラミングです。図の黒い線で囲まれた部分、3つの画像が重なっている部分は3回も描画されていることになります。それ以外にも2つ画像が重なっている部分が沢山あります。これはずいぶんと無駄ですね。この問題に対して出された解答が『Zバッファ』です。Zバッファでは、基本的に画像を手前から描画していくことになります。基本的にということであって、例外も多用しますけれど。先程の図で言うと、黄色、水色、ピンクの順で描画します。その際、それぞれの画像が画面から見てどの程度の距離に描画されるのかを0.0f~1.0fの間で指定します。黄色は0.0f、水色は0.5f、ピンクは1.0fという感じのノリです。この距離のことを『深度』といいます。することによって、DirectXはすでに描画の済んだ領域に描画する際、その深度を調べ、描画しようとするものの深度のほうが浅ければ描画し、深ければ描画しません。描画しないということはそれだけ無駄がなくなり、高速になります。2D描画でも十分効果はありますし、3Dでは必須とも言える技術です。Zバッファは特殊な技術ではなく、DirectXでプログラムを組むときには普通に使用します。>Zバッファの導入に際して、難しいことはありません。デバイス作成時のD3DPRESENT_PARAMETERS構造体を設定する際、以下のメンバに対する設定を加えます。D3DFMT_D16;EnableAutoDepthStencilがZバッファを使用可能にするかどうかの設定です。『TRUE』を指定することによって使用可能になります。AutoDepthStencilFormatには作成するZバッファのフォーマットを指定します。フォーマットはたくさんあり、どのフォーマットを使えば良いか分かりにくいです。正攻法でいくなら、デバイスの使用可能なフォーマットを取得して、そのなかから最良のものを選ぶという方法でしょう。使用可能なフォーマットを取得する関数がDirectXにはあったはずです。これでエラーが発生する場合には色々と変えてみてください。次に、描画に関する設定で、実際にZバッファを使用する設定にします。先程の設定は『Zバッファを使用可能にする』もので、今回の設定は『実際に使用』します。使用するには以下の関数を利用します。);この関数を実行した後の描画には全てZバッファが適用されます。処理の途中で何らかの理由によりZバッファの利用を中止したい場合には、以下のようにします。);この関数の実行した後の描画にはZバッファが適用なれなくなります。>続いて実際の描画に関する部分です。』というフラグを追加します。);これは描画されるバッファと共にZバッファもクリアするという設定です。この後、g_pSprite->Drawの第4引数に与えるD3DXVECTOR3に対して、深度の設定を加えると見事に反映されます。このとき、深度は0.0f~1.0fの間の小数値にしなくてはなりません。>このサンプルを実行すると、クライアント領域に図のようなものが表示されます。描画の順番と実際の重なり順を比較してみてください。画像は以下のものを使用しました。実行ファイルと同じディレクトリに保存して実行してください。ポイントはピンク色で示してあります。