【发布时间】:2014-06-21 22:24:03
【问题描述】:
我正在试验 Direct3D 11 API,但我对 D3D 不是很熟悉。我的项目总是使用 OpenGL。 到目前为止,我已经设法绘制了简单的三角形。现在我想画一些更复杂的物体但是有一个问题。我不知道如何启用深度测试(或者它是否使用完全不同的概念?)。我得到这样的东西:
我这样初始化 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);
之后是着色器加载、矩阵设置、顶点和索引缓冲区初始化。我敢打赌这里缺少一些东西,但不知道是什么。
【问题讨论】:
-
你的问题比代码更多。粘贴您的代码。
-
我找到了问题所在。深度缓冲区需要单独创建(但我现在无法发布完整答案)。
标签: graphics 3d depth-buffer direct3d11