Я пытаюсь создать собственную систему HUD в DirectX 10. Мой текущий метод атаки - просто использовать дерево ячеек для представления различных уровней меню.
Я полагаю, что, отключив Тест глубины, я могу создать меш, который будет вставлен над остальной частью моего трехмерного мира на заднем плане. Чтобы добиться этого, я попытался использовать D3D10_DEPTH_STENCIL_DESC, в результате чего я установил для параметра DepthEnable значение false. Затем я связываю этот D3D10_DEPTH_STENCIL_DESC с состоянием трафарета, который затем активирую перед тем, как нарисовать свою сетку. Это до сих пор оставило меня с отсутствующей сеткой.
Мой вопрос действительно сводится к следующему: нахожусь ли я на правильном пути с этим, или мне нужно переосмыслить это вообще? Кроме того, если это хороший план атаки на эту проблему, есть ли что-то, что я забыл принять во внимание?
Ниже приведены фрагменты кода, где я пытаюсь получить этот HUD
Создание D3D10_DEPTH_STENCIL_DESC:
//HUD Elements
D3D10_DEPTH_STENCIL_DESC dsDesc;
//Depth Settings
dsDesc.DepthEnable = false;
dsDesc.DepthWriteMask = D3D10_DEPTH_WRITE_MASK_ALL;
dsDesc.DepthFunc = D3D10_COMPARISON_LESS;
//Stencil settings
dsDesc.StencilEnable = true;
dsDesc.StencilReadMask = 0xff;
dsDesc.StencilWriteMask = 0xff;
//Always pass the stencil test, and replace the current stencil value with
// the stencil reference value 1
dsDesc.FrontFace.StencilFailOp = D3D10_STENCIL_OP_KEEP;
dsDesc.FrontFace.StencilDepthFailOp = D3D10_STENCIL_OP_KEEP;
dsDesc.FrontFace.StencilPassOp = D3D10_STENCIL_OP_REPLACE;
dsDesc.FrontFace.StencilFunc = D3D10_COMPARISON_ALWAYS;
// We are not rendering backfacing polygons, so these settings do not matter.
dsDesc.BackFace.StencilFailOp = D3D10_STENCIL_OP_KEEP;
dsDesc.BackFace.StencilDepthFailOp = D3D10_STENCIL_OP_KEEP;
dsDesc.BackFace.StencilPassOp = D3D10_STENCIL_OP_REPLACE;
dsDesc.BackFace.StencilFunc = D3D10_COMPARISON_ALWAYS;
//Bind HUD to a stencil
HR(md3dDevice->CreateDepthStencilState(&dsDesc,&hud));
Рисовать я просто делаю:
md3dDevice->OMSetDepthStencilState(hud, 1);
menu.draw(mVP);