directx纹理尺寸

directx纹理尺寸,directx,textures,direct3d,dimensions,Directx,Textures,Direct3d,Dimensions,所以我发现我的图形卡会自动将纹理大小调整为2的幂次,这通常不是问题,但我只需要渲染纹理的一部分,在这样做时,必须将其大小调整为 例: 我将一张370x300像素的图片加载到我的纹理中,并尝试使用特定的源矩形绘制它 RECT test; test.left = 0; test.top = 0; test.right = 370; test.bottom = 300; lpSpriteHandler->Draw( lpTexture,

所以我发现我的图形卡会自动将纹理大小调整为2的幂次,这通常不是问题,但我只需要渲染纹理的一部分,在这样做时,必须将其大小调整为

例: 我将一张370x300像素的图片加载到我的纹理中,并尝试使用特定的源矩形绘制它

RECT test;
    test.left = 0;
    test.top = 0;
    test.right = 370;
    test.bottom = 300;

    lpSpriteHandler->Draw(
        lpTexture,
        &test,          // srcRect
        NULL,           // center
        NULL,            // position
        D3DCOLOR_XRGB(255,255,255)
        );
但由于纹理已自动调整大小(在本例中)为512x512,因此我只能看到原始纹理的一部分

问题是,, 有没有一个函数或东西我可以调用来找到我的纹理的尺寸?
(我试过用谷歌搜索这个,但总是会得到一些关于对象和HSL之类的奇怪的废话)

你可以通过这个调用获得文件信息:

D3DXIMAGE_INFO info;
D3DXGetImageInfoFromFile(file_name, &info);
不过,知道原始纹理大小后,您仍然可以在加载时调整其大小。这显然会影响纹理质量。在网格上应用纹理时,纹理大小调整不是什么大问题(无论如何都会调整大小),但对于绘制精灵来说,这可能是一个问题。为了解决这个问题,我建议创建一个曲面,通过D3DXLoadSurfaceFromFile加载它,然后将它复制到一个“pow2”大小的纹理

还有一个离题的问题:你确定你的卡的功能吗?实际上,您的卡可能支持任意纹理大小,但您使用的是Deafolt强制执行pow2大小的D3DXCreateTextureFromFile()。要避免此问题,请尝试使用此例程的扩展版本:

D3DTexture* texture;
D3DXCreateTextureFromFileEx(
    device, file_name, D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT, 0,
    D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL,
    &texture);
如果您的硬件支持非pow2纹理,您将按原样加载文件。若硬件不能处理它,那个么方法就会失败