DirectX 10でカスタムHUDシステムを作成しようとしています。現在の攻撃方法は、メッシュのツリーを使用してメニューのさまざまなレベルを表すことです。
デプステストを無効にすることで、バックグラウンドで他の3Dワールドの上に貼り付けられるメッシュを作成できると思います。これを実現するために、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);