C ++ DirectX - 加载纹理

时间:2014-06-01 11:23:05

标签: c++ directx

我正在使用来自http://www.mikoweb.eu/index.php?node=28操作方法1来源 DX9

在该示例中一切正常,但现在我想使用PNG(或任何具有alpha和更好压缩的格式)而不是BMP。

函数调用是:

 D3DXCreateTextureFromResourceEx(m_pD3DDevice,
                               gl_hThisInstance,
                               MAKEINTRESOURCE(IDB_BITMAP1),
                               256,
                               128,
                               0,
                               NULL,
                               D3DFMT_UNKNOWN,
                               D3DPOOL_MANAGED,
                               D3DX_FILTER_NONE,
                               D3DX_FILTER_NONE,
                               0xFF000000,
                               NULL,
                               NULL,
                               &m_pBackgroundTexture);

资源文件:

IDB_BITMAP1             BITMAP                  "background.bmp"

我将资源更改为:

IDB_BITMAP1             RC_DATA                  "pic.png"

我的更改后D3DXCreateTextureFromResourceEx返回D3D_OK,但屏幕上没有显示任何内容。看到文档之后,我很快就想到我应该在D3DXIMAGE_INFO结构中指定格式(并将其余部分保留为0,仍然没有。

我的最终目标是从文件加载纹理,所以我尝试了:

D3DXCreateTextureFromFileEx(m_pD3DDevice, "pic.png", 200, 200, 0, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_FILTER_NONE, D3DCOLOR_ARGB(150,100,100,100), NULL, NULL, &m_pBackgroundTexture);

但它没有用。

1 个答案:

答案 0 :(得分:0)

问题是因为在D3DXCreateTextureFromFileEx中指定了高度和宽度,在所有格式上都正确地将两个参数都作为0加载纹理。

但这并没有让我的纹理在屏幕上显示为alpha。

通过谷歌搜索我发现:

m_pBackgroundSprite->Begin(D3DXSPRITE_ALPHABLEND);

解决了这个问题。