directx - 纹理渲染结果不正确

时间:2012-09-13 05:50:49

标签: directx directx-9

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

渲染结果显示为:

enter image description here我想要的是表面上的纯白色。

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

案例2
如果我通过

创建纹理
    D3DXCreateTextureFromFile(device, "e:\\test.bmp",  &texture);

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

案例3
如果我将文件中的纹理创建为大小写2 ,并将纹理更新为大小写1 ,则结果不正确,test.bmp内容仍然略有不足。

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


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

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

2 个答案:

答案 0 :(得分:0)

祝贺。当D3DXCreateTexture的mipmap level参数设置为0时,将创建完整的mipmapped纹理。如果你想使用mipmap,你的函数ConvertRGB2RGBA不仅应该涵盖顶级纹理,还应该覆盖较低级别的纹理。

答案 1 :(得分:0)

将等级参数更改为1,然后就可以了。

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