У меня есть подключенный DirectX, используемый в коде C ++, который рисует текст и спрайт.Я протестировал его, и он хорошо рисовал на 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-индекс я должен установить для спрайта, если он действительно "под" некоторыми другими спрайтами / объектами?
(Я не являюсь автором чего-либо привязанного к устройству, у меня есть только подключенный DirectX API и даже не знаю код приложения, которое я рисую).