1

案例1
我通过创建纹理

    D3DXCreateTexture(device, width, height, 0, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &texture)

并用白色更新纹理。

    D3DLOCKED_RECT lr;
    HRESULT hr = texture->LockRect(0, &lr, NULL, 0);
    ConvertRGB2RGBA(width, height, pixels, stride, (unsigned char*)(lr.pBits), lr.Pitch);
    texture->UnlockRect(0);

渲染结果显示为:

在此处输入图像描述 我想要的是表面上的纯白色。

所有顶点的z值等于0.0f。

案例2
如果我创建纹理

    D3DXCreateTextureFromFile(device, "e:\\test.bmp",  &texture);

并且不更新纹理,它显示绝对正确。

case 3
如果我从文件创建纹理为case 2,并将纹理更新为case 1,结果不正确,test.bmp 内容略有保留。

结论:
更新纹理一定有问题。怎么了???


解决了!!!
将级别参数更改为1,然后它就可以工作了。

    D3DXCreateTexture(device, width, height, 1, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &texture)
4

2 回答 2

0

恭喜。当 D3DXCreateTexture 的 mipmap 级别参数设置为 0 时,将创建完整的 mipmaped 纹理。如果你想使用 mipmap,你的函数 ConvertRGB2RGBA 不仅应该覆盖顶层纹理,还应该覆盖底层纹理。

于 2012-09-13T13:03:23.540 回答
0

将级别参数更改为1,然后它就可以工作了。

D3DXCreateTexture(device, width, height, 1, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &texture)
于 2012-09-19T09:13:36.227 回答