我在C ++代码中使用了一个挂钩DirectX,该X绘制文本和精灵。我对其进行了测试,它很好地吸引了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,甚至不知道我绘制的应用程序代码)。

有帮助吗?

解决方案

首先,将精灵渲染到D3D设备的最简单方法是ID3DXSSPRITE。

其次,我认为有一个错别字,您打算设置Colorop来调制,而不是Alphaop。

但是,我认为在这两种情况下,您只会在您的alpha为0时都会出现看不见的输出。是否是您所使用的纹理完全透明?

另外,请不要忘记在完成注入的渲染代码后(直接或间接)恢复您更改的所有渲染状态。一种简单的方法是捕获状态块并在完成自己的渲染后将其应用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top