У меня есть подключенный DirectX, используемый в коде C++, который рисует текст и спрайт. Я протестировал его, и он отлично отразился на 2D-приложении. Однако, когда я попробовал это с 3D-приложением (в какой-то сложной игре), был видимым только текст. Из этого я вывел, что спрайт не перегружен чем-то другим, поэтому текст тоже будет. Я установил флагиРисование спрайтов на устройстве D3D
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-индекс следует задать для спрайта, если он действительно «под» других спрайтов/объектов?
(Я не автор ничья, нарисованного на устройстве, у меня есть только API DirectX с подключенным интерфейсом и даже не знаю, какой код приложения я рисую).
Я не уверен в опечатке, возможно, это неправильно, но это все равно не работает. Загруженная текстура - это jpg без альфы. И, как я уже сказал, он работает, когда вводится в другое приложение, поэтому я говорю о флагах и z-индексах. В любом случае, я буду смотреть в альфа, чтобы быть уверенным. –
Я все-таки нашел ответ, когда проверил больше флагов. Мне не хватало SetRenderState (D3DRS_ZFUNC, D3DCMP_ALWAYS); // важна для рисования спрайтов вверху, должна быть сброшена', а после пользовательского рендеринга ему требуется откат к 'SetRenderState (D3DRS_ZFUNC, D3DCMP_LESSEQUAL); 'снова. Пожалуйста, разместите его как новый ответ, чтобы я мог его принять. –