ScreenFlip()によるループ処理において、
DrawFillBox()による描画の後DrawPolygon3D()の処理をを行うと上手く描画できないようです。
以下のソースプログラムで確認いたしました。
お手数ですが、もし不具合であれば修正願いたいと思います。
※ DXLib Ver 3.15b, Win7 64bit
//------------------------------
#include <DxLib.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
if (DxLib_Init() < 0) return -1;
SetDrawScreen(DX_SCREEN_BACK);
VECTOR ctr = VGet(320.0f, 240.0f, 0.0f), axis = VGet(1.0f, 0.0f, 0.0f);
VERTEX3D tag[3];
float th = 1.0f * 3.14159265f / 180.0f;
for (int i = 0; i < 3; ++i)
{
tag[i].pos = VAdd(VGet((float)(i - 1) * 100.0f, (float)((i + 1) % 3 - 1) * 100.0f, 0.0f), ctr);
tag[i].norm = VGet(0.0f, 0.0f, -1.0f);
tag[i].dif = GetColorU8(255, 0, 0, 255);
tag[i].spc = GetColorU8(0, 0, 0, 0);
}
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
{
DrawFillBox(0, 0, 640, 480, GetColor(200, 200, 200));
//ClearDrawScreen();
//DrawFillBoxをコメントアウトしてClearDrawScreenのコメントを外すと、
//正常に描画される
// Zバッファを有効にする
SetUseZBuffer3D(TRUE);
SetWriteZBuffer3D(TRUE);
//頂点の回転を計算
MATRIX rm = MGetRotAxis(axis, th);
for (int i = 0; i < 3; ++i)
{
VECTOR tpos = VSub(tag[i].pos, ctr);
tpos = VTransformSR(tpos, rm);
tag[i].pos = VAdd(tpos, ctr);
}
// ポリゴンの描画
DrawPolygon3D(tag, 1, DX_NONE_GRAPH, FALSE);
// Zバッファを無効にする
SetUseZBuffer3D(FALSE);
SetWriteZBuffer3D(FALSE);
// 裏画面の表示
ScreenFlip();
}
DxLib_End();
return 0;
}