2012-01-20 120 views
4

所以我發現我的顯卡會自動將紋理調整爲2的冪,這通常不是問題,但我需要渲染我的紋理的一部分,這樣做時,必須具有尺寸它已被調整到...DirectX紋理尺寸

例如: 我打開一個圖片是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什麼的一些怪異的廢話)

回答

3

您可以通過使用此調用獲取文件信息:

D3DXIMAGE_INFO info; 
D3DXGetImageInfoFromFile(file_name, &info); 

雖然,知道原始紋理大小你仍然會在負載上調整大小。這顯然會影響紋理質量。在網格中應用紋理調整大小並不是什麼大問題(它會調整大小),但是對於繪製精靈來說,這可能是一個問題。要解決這個問題,我可以建議創建一個曲面,通過D3DXLoadSurfaceFromFile加載它,然後將其複製到「pow2」大小的紋理。

而且一個offtopic:你確定你的卡功能?可能實際上你的卡支持任意的紋理尺寸,但你使用D3DXCreateTextureFromFile()由deafult強制pow2尺寸。爲了避免這種嘗試使用該程序的擴展版本:

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

如果您的硬件suppors非POW2紋理,你會得到你的文件中加載,因爲它是。如果硬件不能處理它,方法將失敗。