Код: Выделить всё
D3D11_TEXTURE2D_DESC depthBufferDesc;
d3d11FrameBuffer->GetDesc(&depthBufferDesc);
d3d11FrameBuffer->Release();
depthBufferDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
depthBufferDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL;
depthBufferDesc.Width = 1920;
depthBufferDesc.Height = 1080;
depthBufferDesc.MipLevels = 1;
depthBufferDesc.ArraySize = 1;
depthBufferDesc.SampleDesc.Count = 1;
depthBufferDesc.SampleDesc.Quality = 0;
depthBufferDesc.Usage = D3D11_USAGE_DEFAULT;
depthBufferDesc.CPUAccessFlags = 0;
depthBufferDesc.MiscFlags = 0;
ID3D11Texture2D* depthBuffer;
HRESULT res = d3d11Device->CreateTexture2D(&depthBufferDesc, nullptr, &depthBuffer);
D3D11_DEPTH_STENCIL_VIEW_DESC depthStencilViewDesc;
ZeroMemory(&depthStencilViewDesc, sizeof(depthStencilViewDesc));
depthStencilViewDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
depthStencilViewDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;
depthStencilViewDesc.Texture2D.MipSlice = 0;
res = d3d11Device->CreateDepthStencilView(depthBuffer, nullptr, depthBufferView);
Код: Выделить всё
ID3D11DepthStencilState* depthStencilState;
{
D3D11_DEPTH_STENCIL_DESC depthStencilDesc = {};
depthStencilDesc.DepthEnable = true;
depthStencilDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;
depthStencilDesc.DepthFunc = D3D11_COMPARISON_LESS;
depthStencilDesc.StencilEnable = false;
depthStencilDesc.StencilReadMask = 0xFF;
depthStencilDesc.StencilWriteMask = 0xFF;
depthStencilDesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_INCR;
depthStencilDesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
depthStencilDesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_DECR;
depthStencilDesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
d3d11Device->CreateDepthStencilState(&depthStencilDesc, &depthStencilState);
}
Код: Выделить всё
d3d11DeviceContext->RSSetState(rasterizerState);
d3d11DeviceContext->OMSetDepthStencilState(depthStencilState, 1);
d3d11DeviceContext->OMSetRenderTargets(1, &d3d11FrameBufferView, depthBufferView);
Код: Выделить всё
ID3D11RasterizerState* rasterizerState;
{
D3D11_RASTERIZER_DESC rasterizerDesc = {};
rasterizerDesc.FillMode = D3D11_FILL_SOLID;
rasterizerDesc.CullMode = D3D11_CULL_BACK;
rasterizerDesc.FrontCounterClockwise = true;
rasterizerDesc.DepthBiasClamp = 0;
rasterizerDesc.DepthClipEnable = false;
rasterizerDesc.AntialiasedLineEnable = false;
rasterizerDesc.MultisampleEnable = false;
rasterizerDesc.ScissorEnable = false;
rasterizerDesc.SlopeScaledDepthBias = 0.0f;
rasterizerDesc.DepthBias = 0;
d3d11Device->CreateRasterizerState(&rasterizerDesc, &rasterizerState);
}
Код: Выделить всё
D3D11_VIEWPORT viewport;
viewport.MinDepth = 0;
viewport.MaxDepth = 1;
viewport.TopLeftX = 0;
viewport.TopLeftY = 0;
viewport.Width = 1920;
viewport.Height = 1080;
d3d11DeviceContext->RSSetViewports(1, &viewport);
Код: Выделить всё
PixelInputType vs_main(VertexInputType input)
{
PixelInputType output;
float4 worldPosition = mul(input.position, worldMatrix);
float4 viewPosition = mul(worldPosition, viewMatrix);
output.position = mul(viewPosition, projectionMatrix);
output.tex = input.tex;
output.normal = normalize(input.normal);
return output;
}
У меня отключен клип глубины в растеризаторе, так как, когда я его включаю, ничего не отображается, хотя, насколько я знаю, это не должно влиять на это.
Подробнее здесь: https://stackoverflow.com/questions/790 ... ectively-n