いつもDXライブラリには大変お世話になっております。
DXライブラリには、描画順に関わらず、前後の位置関係に応じて描画を調整してくれるSetUseZBuffer3D関数がありますが、この関数を用いて半透明な画像を描画したところ、半透明部分の描画がおかしくなるという現象が起きました。
サンプルコードをこちらに載せます。
このコードでは、最初に手前に白い三角形を半透明に描画した後、奥に赤い三角形を描画しています。
白い三角形が不透明なら問題ないのですが、半透明の場合は白い三角形の後ろに赤い三角形が描画されておらず、背景の黒が映っています。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Zバッファを有効にする
SetUseZBuffer3D( TRUE ) ;
// Zバッファへの書き込みを有効にする
SetWriteZBuffer3D( TRUE ) ;
SetDrawBlendMode(DX_BLENDMODE_ALPHA,100);
DrawTriangle3D(
VGet(100.0f,100.0f, 0.0f),
VGet(500.0f,400.0f, 0.0f),
VGet(600.0f,100.0f, 0.0f), GetColor( 255,255,255 ), TRUE ) ;
SetDrawBlendMode(DX_BLENDMODE_NOBLEND,0);
DrawTriangle3D(
VGet(300.0f,200.0f,100.0f),
VGet(100.0f,500.0f,100.0f),
VGet(800.0f,100.0f,100.0f), GetColor( 255,0,0 ), TRUE ) ;
// キー入力待ちをする
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
関数の仕様を見れば、後ろにあるものは描画されないとのことなのでこの結果は当然なのですが、これでは半透明な画像の描画がうまくできません。
Zソートして遠くのものから描画したり、2回に分けて描画するなどの方法で解決できるのですが、DXライブラリにこれを解決する機能があるのでしたら教えていただけないでしょうか。
どうかよろしくお願いします。