DirectX9で描画するのに問題があります。それがあるように、これはその上に何もBackgroundColour画面を描画するZバッファが描画しないようにしています
// Create the D3D object, return failure if this can't be done.
if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION))) return E_FAIL;
// Set up the structure used to create the D3DDevice
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
// Create the D3DDevice
if (FAILED(g_pD3D -> CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice)))
{
return E_FAIL;
}
// Turn on the Z buffer
g_pd3dDevice -> SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
g_pd3dDevice -> SetRenderState(D3DRS_ZFUNC, D3DCMP_LESS);
g_pd3dDevice -> SetRenderState(D3DRS_ZWRITEENABLE, TRUE);
// Start with lighting off - we can add lights later.
g_pd3dDevice -> SetRenderState(D3DRS_LIGHTING, FALSE);
// Set transparencies
g_pd3dDevice -> SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
g_pd3dDevice -> SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
g_pd3dDevice -> SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
g_pd3dDevice -> SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD);
// Set culling
g_pd3dDevice -> SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
return S_OK;
:
void Render(GameWorld& world)
{
DWORD BackgroundColour = 0x00102010;
g_pd3dDevice -> Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, BackgroundColour, 1.0f, 0);
// Begin rendering the scene.
if (SUCCEEDED(g_pd3dDevice -> BeginScene()))
{
world.draw();
g_pd3dDevice -> EndScene();
}
// Present the backbuffer to the display.
g_pd3dDevice -> Present(NULL, NULL, NULL, NULL);
}
私はこのコードではDirectXを設定している:
は、ここに私のレンダリング機能です。
Zバッファをオフにすることによってg_pd3dDevice - > SetRenderState(D3DRS_ZENABLE、D3DZB_FALSE);]すべては、 "draw"関数が呼び出された順に描画されます。後で描画されるオブジェクトは、先に描画されたオブジェクトをあいまいにします
私もこれらの変更を行う試してみました:
g_pd3dDevice -> SetRenderState(D3DRS_ZFUNC, D3DCMP_GREATER);
と
g_pd3dDevice -> Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, BackgroundColour, 0.0f, 0);
効果が今あるのにかかわらず、その空間的位置の、後に描かれている最初の曖昧なオブジェクトを描画されたオブジェクト。
私が望む効果は、近くのオブジェクトが遠くのオブジェクトを隠すことです。
誰もがこれについていくつかの光を当てることができます。
ありがとうございます。
これを解決する最も簡単な方法は、PIXを使用することです.PIXを入手する際には既にインストール済みです。 PIXデバッグでは、これはケーキウォークです(メモリから):PIXでプログラムを起動し、F12を押して、アプリケーションを閉じてフレームを分析します。最初の描画呼び出しを選択し、メッシュタブをクリックします。その時点で、デバイスを調査することができます。ドローコールの前と後に、添付のZターゲットを見てください。 Zバッファと一緒にデバイスを調べると、これが本当に速く絞り込まれ、何がダウンしているのかがわかります。 – Ylisar
PIXでプログラムを実行すると、何も描画されず、テクスチャの読み込みに失敗します。 – Arkady
実行ファイルを直接起動するとどうなりますか? VS内からではありません。 – Ylisar