こんばんは、Aquidです。
Zバッファを使用して画像部分以外に対して描画しようとDraw○○ToZBuffer系関数を使用すると
DrawRotaGraphToZBufferとDrawModiGraphToZBufferの二つを使用したときのみ正常に描画することができません。
ただ、DX_ZWRITE_CLEARとDX_ZWRITE_MASKを入れ替える(つまり画像部分のみに対して描画しようとする)と正常に描画されます。
これは環境に依存してしまうものなのでしょうか?
実行環境は
・WindowsXP + GeForce 8400GS
・WindowsVista + Intel GMA 950
(どちらもウィンドウモード、画面の色32ビットです)
ライブラリのバージョンは3.00b(2009年9月17日、21:57:04にダウンロードしてきたものを使用)です。
・使用したソース
(画像は ttp://www.aquafactory.x0.com/dxlib/zbuftest.bmp )
#include "DxLib.h"
// プログラムは WinMain から始まります
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);
if( DxLib_Init() == -1 ){
MessageBox(NULL,"DirectXの初期化に失敗。\n","Error",MB_OK);
return -1 ; // エラーが起きたら直ちに終了
}
//テスト用画像をロード
int TestGraph=LoadGraph("zbuftest.bmp");
//メインループ
while(ProcessMessage() == 0){
SetDrawScreen(DX_SCREEN_BACK);
ClearDrawScreen();
//Zバッファを有効にする
SetUseZBufferFlag(TRUE);
//画面全体のマスクを一度初期化する
DrawBoxToZBuffer(0,0,640,480,TRUE,DX_ZWRITE_CLEAR);
//さまざまな描画関数を用いてマスクで覆う
DrawGraphToZBuffer(0,0,TestGraph,DX_ZWRITE_MASK);
DrawTurnGraphToZBuffer(128,0,TestGraph,DX_ZWRITE_MASK);
DrawExtendGraphToZBuffer(256,0,256+256,128,TestGraph,DX_ZWRITE_MASK);
//以下2つの関数では何故か正常に覆えない
DrawRotaGraphToZBuffer(64,128 +64,1.0f,0.5f,TestGraph,DX_ZWRITE_MASK);
DrawModiGraphToZBuffer(128,128,256,128,224,224,128,256,TestGraph,DX_ZWRITE_MASK);
//単純図形
DrawBoxToZBuffer(0,256,128,256+64,FALSE,DX_ZWRITE_MASK);
DrawCircleToZBuffer(128+64,256+64,64,FALSE,DX_ZWRITE_MASK);
DrawBoxToZBuffer(256,256,256+128,256+64,TRUE,DX_ZWRITE_MASK);
DrawCircleToZBuffer(384+64,256+64,64,TRUE,DX_ZWRITE_MASK);
//Zバッファマスクがかかってないところを描画する
DrawBox(0,0,640,480,GetColor(255,255,255),TRUE);
ScreenFlip();
clsDx();
};
//DxLibを破棄
DxLib_End();
//でもって終了!
return 0 ;
}
・WindowsXP + GeForce 8400GS上でのLog.txt
461:IDirect3D9 オブジェクトを取得します.... 成功
466:IDirect3DDevice9 オブジェクトを取得します.... ハードウエア頂点演算を使用します
557:成功
557:画面のフォーマットは D3DFMT_X8R8G8B8 です
557:Zバッファのフォーマットは D3DFMT_D16 です
557:16bit カラーフォーマットは D_D3DFMT_R5G6B5 です
557:32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です
557:アルファ付き 16bit カラーフォーマットは D_D3DFMT_A4R4G4B4 です
558:アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
558:アルファテスト用 16bit カラーフォーマットは D_D3DFMT_A1R5G5B5 です
558:アルファテスト用 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
558:DXT1テクスチャフォーマットは D_D3DFMT_DXT1 です
558:DXT2テクスチャフォーマットは D_D3DFMT_DXT2 です
559:DXT3テクスチャフォーマットは D_D3DFMT_DXT3 です
559:DXT4テクスチャフォーマットは D_D3DFMT_DXT4 です
559:DXT5テクスチャフォーマットは D_D3DFMT_DXT5 です
559:描画用 16bit カラーフォーマットは D_D3DFMT_R5G5B5 です
559:描画用 32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です
560:描画用アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
560:Zバッファを作成します.... 成功
569:プログラマブルシェーダーを使用します