-2
我正在嘗試Direct3D 11 API,我對D3D不是很熟悉。我一直對我的項目使用OpenGL。 到目前爲止,我設法繪製了一個簡單的三角形。現在我想繪製一些更復雜的對象,但有一個問題。我不知道如何啓用深度測試(或使用完全不同的概念?)。我得到的東西是這樣的:如何在Direct3D 11中啓用深度測試?
我初始化D3D這樣的:
DXGI_SWAP_CHAIN_DESC swapChainDesc;
ZeroMemory(&swapChainDesc, sizeof(swapChainDesc));
swapChainDesc.BufferCount = 1;
swapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
swapChainDesc.OutputWindow = hWnd;
swapChainDesc.SampleDesc.Count = 1;
swapChainDesc.Windowed = true;
HRESULT result = D3D11CreateDeviceAndSwapChain(
NULL,
D3D_DRIVER_TYPE::D3D_DRIVER_TYPE_HARDWARE,
NULL,
0,
NULL,
0,
D3D11_SDK_VERSION,
&swapChainDesc,
&SwapChain,
&Device,
NULL,
&DeviceContext);
if (result != S_OK)
throw "Direct3D initialization error";
ID3D11Texture2D *backBufferTexture;
result = SwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID *)&backBufferTexture);
if (result != S_OK)
{
[error handling here]
}
result = Device->CreateRenderTargetView(backBufferTexture, NULL, &BackBuffer);
backBufferTexture->Release();
if (result != S_OK)
{
[error handling here]
}
DeviceContext->OMSetRenderTargets(1, &BackBuffer, NULL);
接着是着色器加載,矩陣設定,頂點和索引緩衝區的初始化。我敢打賭,這裏有些失蹤,但不知道是什麼。
你的問題比代碼更鬆散。粘貼你的代碼。 – FunctionR
我發現了什麼問題。深度緩衝區需要單獨創建(但我現在不能發佈完整答案)。 – pvc