> ZBuffer等
DrawGraphToZBuffer などの関数は、Zバッファをマスクとして使用する
ためのもので、描画をZ値付きで描画するものではありません
<<サンプルプログラム>>
(Zバッファをマスクで塗りつぶした後、Test1.bmp の形でマスクを削除して、
その後画面全体を黄色く塗りつぶす( 結果的に黄色い Test1.bmp の形のものが表示されます ) )
#include "DxLib.h"
// ベタ塗り関数
void BetaNuri( int x, int y, int GrHandle, int Color )
{
int w, h;
// 画像のサイズを取得する
GetGraphSize( GrHandle, &w, &h );
// Zバッファを有効にする
SetUseZBufferFlag( TRUE );
// Zバッファに画像と同じ大きさのマスクを書き込む
DrawBoxToZBuffer( x, y, x + w, y + h, TRUE, DX_ZWRITE_MASK );
// Zバッファに画像の形でマスクを刳り貫く
DrawGraphToZBuffer( x, y, GrHandle, DX_ZWRITE_CLEAR );
// 画像の大きさのボックスを描画する(マスクが刳り貫かれているところしか塗りつぶされない)
DrawBox( x, y, x + w, y + h, Color, TRUE );
// Zバッファを無効にする
SetUseZBufferFlag( FALSE );
}
// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int GraphHandle;
// ウインドウモードで起動
ChangeWindowMode( TRUE );
// DXライブラリの初期化
if( DxLib_Init() == -1 ) return -1;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK );
// 画像の読み込み
GraphHandle = LoadGraph( "Test1.bmp" );
// 赤色でベタ塗り描画を行う
BetaNuri( 0, 0, GraphHandle, GetColor( 255,255,0 ) );
// 裏画面の内容を表画面に反映
ScreenFlip();
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
> Zソートの代わりにZバッファ
DXライブラリはデフォルトではZバッファを使用しない設定になっていますので、
SetUseZBufferFlag( TRUE ) ; でZバッファを有効にした上で、更に
SetWriteZBufferFlag( TRUE ) ; でZバッファへの書き込みを有効にしないと
SetDrawZ の効果はありません
( 両方を実行した後では DrawGraph や DrawLine 等全ての描画関数がZバッファを
考慮したものとなります )
ただ、ZバッファをZソートの代わりに使用すると半透明描画絡みの問題が発生して
しまうので、あまりお勧めできません
<<サンプルプログラム>>
( Zバッファ書き込み付きの四角形を3つ、座標を32ドットづつずらして描画します
先に描画する四角形ほどZ値が低いので、Zバッファの処理なしであれば最後に描画する
青い四角形が一番上に表示されますが、このサンプルでは一番最初に描画した
赤い四角形が一番上に表示されます )
#include "DxLib.h"
// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// ウインドウモードで起動
ChangeWindowMode( TRUE );
// DXライブラリの初期化
if( DxLib_Init() == -1 ) return -1;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK );
// Zバッファを有効にする
SetUseZBufferFlag( TRUE ) ;
// Zバッファに書き込みを行う
SetWriteZBufferFlag( TRUE ) ;
// 少しづつ座標がずれた3つの四角形を描画する
// 先に描画する四角形の方が上に表示されるようなZ値で書き込みます
// SetDrawZ に指定できる値は 0.0f 〜 1.0f )
SetDrawZ( 0.1f ) ;
DrawBox( 0 + 0, 0, 128 + 0, 128, GetColor( 255,0,0 ), TRUE ) ;
SetDrawZ( 0.2f ) ;
DrawBox( 0 + 32, 0, 128 + 32, 128, GetColor( 0,255,0 ), TRUE ) ;
SetDrawZ( 0.3f ) ;
DrawBox( 0 + 64, 0, 128 + 64, 128, GetColor( 0,0,255 ), TRUE ) ;
// 裏画面の内容を表画面に反映
ScreenFlip();
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}