Вопрос

У меня есть подключенный 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 Потому что SPRITE не быть видимым вообще в любом приложении, поэтому я не включил его, и он прокомментировал.

Существует ли какой-либо неудачный способ нарисовать спрайты на D3D? В противном случае я должен использовать различные флаги / значения для них?

Кроме того, какой Z-индекс я должен установить для спрайта в случае, если это действительно «под» некоторые другие спрайты / объекты?

(Я не автор ничего, обращающегося к устройству, у меня только подключенный DirectX API и даже не знаете код приложения, которого я рисовал).

Это было полезно?

Решение

Во-первых, самый простой способ визуализации спрайтов до устройства D3D ID3DXSPRITE.

Во-вторых, я думаю, что есть опечатка, и вы подразумеваете установить колокола для модуляции, а не альфаопа.

Тем не менее, я думаю, что в обоих случаях вы получите только невидимый вывод, если ваш альфа был 0. Может ли то, что текстура, которую вы используете, полностью прозрачна?

Кроме того, не забудьте восстановить все состояния визуализации, которые вы изменились (напрямую или косвенно) после того, как вы закончите с помощью инъецированного Render Code. Простой способ сделать это - для захвата блока состояния и применить его после того, как вы закончите с вашим собственным рендерингом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top