Je tente de créer un système HUD personnalisé dans DirectX 10. Ma méthode d'attaque actuelle consiste simplement à utiliser un arbre de maillages pour représenter différents niveaux du menu.DirectX 10 HUD en C++
Je crois qu'en désactivant le test de profondeur, je peux faire un maillage qui est collé au-dessus du reste de mon monde 3D en arrière-plan. Pour y parvenir, j'ai essayé d'utiliser un D3D10_DEPTH_STENCIL_DESC par lequel j'ai défini l'option DepthEnable sur false. Je lie ensuite ce D3D10_DEPTH_STENCIL_DESC à un état de stencil que j'active ensuite juste avant de dessiner mon mesh. Cela m'a laissé jusqu'à présent avec un maillage manquant.
Ma question se résume à: Suis-je sur la bonne voie avec ceci, ou ai-je besoin de repenser tout cela? De plus, si c'est un bon plan d'attaque sur ce problème, y a-t-il quelque chose que j'oublie de prendre en compte?
Voici les bits de code où je tente d'obtenir ce HUD
Création du 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));
Pour dessiner je simplement:
md3dDevice->OMSetDepthStencilState(hud, 1);
menu.draw(mVP);