案例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);
并且不更新纹理,它显示绝对正确。
案例3 :
如果我将文件中的纹理创建为大小写2 ,并将纹理更新为大小写1 ,则结果不正确,test.bmp内容仍然略有不足。
结论
更新纹理一定有问题。怎么了???
已解决!!!
将级别参数更改为1,然后就可以了。
D3DXCreateTexture(device, width, height, 1, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &texture)
答案 0 :(得分:0)
祝贺。当D3DXCreateTexture的mipmap level参数设置为0时,将创建完整的mipmapped纹理。如果你想使用mipmap,你的函数ConvertRGB2RGBA不仅应该涵盖顶级纹理,还应该覆盖较低级别的纹理。
答案 1 :(得分:0)
将等级参数更改为1,然后就可以了。
D3DXCreateTexture(device, width, height, 1, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &texture)