簡體   English   中英

在D3D設備上繪制精靈

[英]Drawing sprites on D3D device

我在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導致該精靈在任何應用程序中根本不可見,因此我沒有啟用它,因此ALPHABLEND其注釋掉。

是否存在通過D3D繪制精靈的防故障方法? 否則,我應該為它們使用不同的標志/值嗎?

另外,如果該精靈確實位於其他精靈/對象之下,我應該為該精靈設置哪個z-index?

(我不是繪制設備的任何東西的作者,我只有鈎住的DirectX API,甚至都不知道我繪制的應用程序的代碼)。

首先,將精靈渲染到D3D設備的最簡單方法是ID3DXSprite。

其次,我認為有一個錯字,您打算將COLOROP設置為MODULATE,而不是ALPHAOP。

但是,我認為在兩種情況下,如果您的alpha為0,您最終只會得到不可見的輸出。難道是您使用的紋理是完全透明的嗎?

同樣,在完成注入的渲染代碼后,不要忘記恢復所有更改的(直接或間接)渲染狀態。 一種簡單的方法是捕獲狀態塊,並在完成自己的渲染后將其應用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM