お世話になっております。
いつもDXライブラリを使用させていただいております。
現在、大量の3Dモデルを高速に描画するために
DrawPolygonIndexed3D_UseVertexBuffer関数を用いてモデルを描画しております。
その際に、SetUseZBufferFlag関数を使用しているのですが
SetUseZBufferFlag(TRUE);を入れた後に描画される
2D関連(DrawBoxやDrawGraphなど)の描画順がおかしくなりましたのでご報告させていただきます。
3Dの描画を行う前に、2D関連の描画処理を呼び出していますが
最終的な描画結果は、2D関連が最も手前にきてしまいます。
再現プログラムを書いてみましたのでご覧いただければ幸いです。
一部プログラムに
ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=3007
のプログラムを利用しています。
DXライブラリバージョン:Ver3.13
コンパイラ:Visual Studio Express 2013
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
VERTEX3D Vertex[4];
WORD Index[6];
int VertexBufHandle;
int IndexBufHandle;
ChangeWindowMode(TRUE);//ウィンドウモード
// DXライブラリの初期化
ChangeWindowMode(TRUE);
if (DxLib_Init() < 0)
{
// エラーが発生したら直ちに終了
return -1;
}
// Zバッファを使用する
SetUseZBufferFlag(TRUE);
// Zバッファへの書き込みを行う
SetWriteZBufferFlag(TRUE);
// 4頂点分の頂点バッファを作成
VertexBufHandle = CreateVertexBuffer(4, DX_VERTEX_TYPE_NORMAL_3D);
// 6個分のインデックスバッファを作成
IndexBufHandle = CreateIndexBuffer(6, DX_INDEX_TYPE_16BIT);
// 4頂点分のデータをセット
Vertex[0].pos = VGet(100.0f, 100.0f, 0.0f);
Vertex[0].norm = VGet(0.0f, 0.0f, -1.0f);
Vertex[0].dif = GetColorU8(255, 255, 255, 255);
Vertex[0].spc = GetColorU8(0, 0, 0, 0);
Vertex[0].u = 0.0f;
Vertex[0].v = 0.0f;
Vertex[0].su = 0.0f;
Vertex[0].sv = 0.0f;
Vertex[1].pos = VGet(250.0f, 100.0f, 0.0f);
Vertex[1].norm = VGet(0.0f, 0.0f, -1.0f);
Vertex[1].dif = GetColorU8(255, 0, 255, 255);
Vertex[1].spc = GetColorU8(0, 0, 0, 0);
Vertex[1].u = 0.0f;
Vertex[1].v = 0.0f;
Vertex[1].su = 0.0f;
Vertex[1].sv = 0.0f;
Vertex[2].pos = VGet(100.0f, 300.0f, 0.0f);
Vertex[2].norm = VGet(0.0f, 0.0f, -1.0f);
Vertex[2].dif = GetColorU8(0, 255, 255, 255);
Vertex[2].spc = GetColorU8(0, 0, 0, 0);
Vertex[2].u = 0.0f;
Vertex[2].v = 0.0f;
Vertex[2].su = 0.0f;
Vertex[2].sv = 0.0f;
Vertex[3].pos = VGet(400.0f, 200.0f, 0.0f);
Vertex[3].norm = VGet(0.0f, 0.0f, -1.0f);
Vertex[3].dif = GetColorU8(0, 255, 255, 255);
Vertex[3].spc = GetColorU8(0, 0, 0, 0);
Vertex[3].u = 0.0f;
Vertex[3].v = 0.0f;
Vertex[3].su = 0.0f;
Vertex[3].sv = 0.0f;
// 2ポリゴン分のインデックスデータをセット
Index[0] = 0;
Index[1] = 1;
Index[2] = 2;
Index[3] = 3;
Index[4] = 2;
Index[5] = 1;
// 頂点データを頂点バッファに転送
SetVertexBufferData(0, Vertex, 4, VertexBufHandle);
// インデックスデータをインデックスバッファに転送
SetIndexBufferData(0, Index, 6, IndexBufHandle);
while (CheckHitKey(KEY_INPUT_ESCAPE)==0){
if (ProcessMessage() != 0)
return -1;
if (ClearDrawScreen() != 0)
return -1;
DrawBox(0, 200, 640, 280, 0xFFFFFF, TRUE);
// 頂点バッファとインデックスバッファを使用した2ポリゴンの描画
DrawPolygonIndexed3D_UseVertexBuffer(VertexBufHandle, IndexBufHandle, DX_NONE_GRAPH, FALSE);
// カプセルを描画する
DrawCapsule3D(VGet(320.0f, 100.0f, 0.0f), VGet(320.0f, 300.0f, 0.0f), 40.0f, 8, GetColor(0, 255, 0), GetColor(255, 255, 255), TRUE);
ScreenFlip();
}
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}
以上、ご報告とさせていただきます。
解決策などありましたら教示いただけると幸いです。