トップページ > 過去ログ > 記事閲覧
Draw○○ToZBuffer関数系はどう使いますか?
名前:Hima 日時: 2009/07/15 01:05

こんにちわ、またヒマです。私は今Zorderでゲームオブジェクトを並べて描いてほしいですが。 OpenGLならZBufferをつかうっと言ってくれました。でも DxLib.hを見ると、このZBuffer関数系が見つけました。 この関数たちはどう使いますか? 教えて下さい。m(_ _)m  あ!もうひとつの問題です。 SetDrawZをセットしたんですが、何も起こらないみたいですが... 問題が多すぎなら本当にすみません (^ ^;)

Page: 1 |

Re: Draw○○ToZBuffer関数系はどう使いますか? ( No.1 )
名前:管理人 日時:2009/07/18 23:15

> 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 ; }
Re: Draw○○ToZBuffer関数系はどう使いますか? ( No.2 )
名前:Hima 日時:2009/07/21 03:55

管理人様、ご返信ありがとうございます! m(_ _)m

Page: 1 |