Domanda

Ho un DirectX agganciato utilizzato in codice C ++ che disegna il testo e sprite. L'ho provato ed è disegnato bene su applicazioni 2D. Tuttavia, quando ho provato con applicazioni 3D (alcuni complesso gioco in realtà), solo testo era visibile. Da che ho dedotto lo sprite non è essere scoperti da qualcos'altro, da qui il testo sarebbe troppo. I set flags

    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);

Per qualche ragione, ALPHABLEND causato lo sprite di non essere visibile a tutti in qualsiasi applicazione, quindi non le permettessero ed è commentata.

fa alcun modo a prova di errore per disegnare sprite oltre D3D esiste? In caso contrario, dovrei usare diverse bandiere / valori per loro?

Inoltre, che z-index Devo impostare per lo sprite nel caso in cui è veramente "in" alcuni altri sprite / oggetti?

(io non sono autore di tutto ciò disegnato al dispositivo, ho solo il agganciato API DirectX e non so nemmeno il codice di applicazione traggo sopra).

È stato utile?

Soluzione

In primo luogo, il modo più semplice per rendere sprite ad un dispositivo D3D è ID3DXSprite.

In secondo luogo, penso che ci sia un errore di battitura e si intende impostare COLOROP per modulare, non ALPHAOP.

Tuttavia, credo che in entrambi i casi si sarebbe solo finisce con una potenza invisibile se il vostro alfa era 0. potrebbe essere che la trama si sta utilizzando è completamente trasparente?

Inoltre, non dimenticare di ripristinare tutti il ??rendering stati modificati (direttamente o indirettamente) dopo aver finito con il codice iniettato rendering. Un modo semplice per farlo è quello di acquisire un blocco di stato e applicarlo dopo aver finito con il proprio rendering.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top