テキストとスプライトを描画する C++ コードで使用されるフックされた DirectX があります。テストしたところ、2D アプリケーションにうまく描画されました。しかし、3D アプリケーション (実際には複雑なゲーム) で試してみると、テキストしか表示されませんでした。そのことから、スプライトが他の何かによって上書きされていないと推測したため、テキストも上書きされます。旗を立てました
SetVertexShader(0);
SetPixelShader(0);
SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE);
//SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
SetRenderState(D3DRS_ZENABLE, false);
SetRenderState(D3DRS_LIGHTING, FALSE);
SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_DIFFUSE);
SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
何らかの理由でALPHABLEND
、スプライトがどのアプリケーションでもまったく表示されなくなったため、有効にせず、コメントアウトしました。
D3D 上にスプライトを描画する確実な方法はありますか? それ以外の場合、それらに異なるフラグ/値を使用する必要がありますか?
また、スプライトが実際に他のスプライト/オブジェクトの「下」にある場合に備えて、スプライトにどの z-index を設定する必要がありますか?
(私はデバイスに描画されるものの作成者ではありません。フックされた DirectX API しか持っておらず、描画するアプリケーションのコードさえ知りません)。