> 2D描画でZ値を指定して表示することはできますか?
3Dと同じようにZバッファを使うことはできますが、2Dとの相性はあまりよくないので
お勧めはできません
お勧めできない理由ですが、Zバッファは半透明と非常に相性が悪いので
半透明のものを描画する場合はやはり画面に対して奥のものから順番に描画しなければなりません
また、半透明の要素が無いドット絵でも、拡大して描画をする場合に
SetDrawMode( DX_DRAWMODE_BILINEAR ) ; を使用してバイリニア補間で描画した場合は
ドット絵の透過させる部分と透過させない部分との間に半透明の領域ができてしまうので
この場合もZバッファとは相性が悪く、画面奥のものから描画しなくてはなりません
とりあえず以下のプログラムのように SetUseZBufferFlag と SetWriteZBufferFlag と
SetDrawZ を使用することで2D描画でも Zバッファを使用することができますので、
よろしければお試しください
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int GrHandle ;
ChangeWindowMode( TRUE ) ;
// DXライブラリ初期化処理
if( DxLib_Init() == -1 )
return -1 ;
// 画像の読み込み
GrHandle = LoadGraph( "test1.bmp" ) ;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// 画面を初期化
ClearDrawScreen() ;
// Zバッファを有効にして、Zバッファへの書き込みも有効にする
SetUseZBufferFlag( TRUE ) ;
SetWriteZBufferFlag( TRUE ) ;
// 描画物のZ値をセット( 指定できる値の範囲は 0.0fより大きく、1.0fより小さい値 )
SetDrawZ( 0.5f ) ;
// 1枚目を描画
DrawGraph( 0, 0, GrHandle, TRUE ) ;
// 描画物のZ値をセット( 指定できる値の範囲は 0.0fより大きく、1.0fより小さい値 )
SetDrawZ( 0.7f ) ;
// 2枚目を描画
DrawGraph( 40, 0, GrHandle, TRUE ) ;
// Zバッファを無効にして、Zバッファへの書き込みも無効にする
SetUseZBufferFlag( FALSE ) ;
SetWriteZBufferFlag( FALSE ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}
Zバッファを使用した描画を行う前に SetUseZBufferFlag( TRUE ); と
SetWriteZBufferFlag( TRUE ) ; を実行して、Zバッファを使用ない描画に戻したいタイミングで
SetUseZBufferFlag( FALSE ); と SetWriteZBufferFlag( FALSE ) ; を実行します
奥行きの度合いは SetDrawZ で指定しますが、注釈にもありますがこちらの値は
0.0f より大きく、1.0f より小さい値である必要があります
( 一応 0.0f や 1.0f でも大丈夫ですが、微妙な値なのでグラフィックスデバイスによっては
正常に描画されない可能性があるので、使用する値の範囲は 0.0001f 〜 0.999f などに
しておいた方が良いです )