這是一個(gè)很古老的問題了,不過最近使用HGE做我的Graphics給引擎用時(shí),卻又發(fā)現(xiàn)了這個(gè)問題
下圖是一張序列幀圖片,游戲中需要進(jìn)行切片后進(jìn)行播放,當(dāng)然,這在HGE中一切正常,沒有任何問題
這張?jiān)瓐D大小480×285,非2的n次冪,載入D3D后,紋理表面大小為512×512
在使用D3DXCreateTextureFromFile*系列函數(shù)載入紋理時(shí),有這么一個(gè)參數(shù)
Filter [in] Combination of one or more flags controlling how the image is filtered. Specifying D3DX_DEFAULT for this parameter is the equivalent of specifying D3DX_FILTER_TRIANGLE | D3DX_FILTER_DITHER. Each valid filter must contain one of the flags in D3DX_FILTER. 這個(gè)參數(shù)有這么幾種寫法
D3DX_FILTER_NONE
D3DX_FILTER_POINT
D3DX_FILTER_LINEAR
D3DX_FILTER_TRIANGLE
D3DX_FILTER_BOX
在HGE中,用的是D3DX_FILTER_NONE,而我的引擎里,習(xí)慣性使用D3DX_FILTER_POINT
HGE繪制出來的效果就是原圖,而只是修改成D3DX_FILTER_POINT,圖片就會被壓縮
我的引擎里紋理的大小,坐標(biāo)都是使用圖片真實(shí)的size。但是HGE其Texture_GetWidth,Texture_GetHeight默認(rèn)都是取Surface的大小,也就是512×512
并且其精靈繪制時(shí),也是統(tǒng)一使用512的大小來繪制,序列幀算法也是以圖片大小為準(zhǔn)來進(jìn)行切片,這種算法未免詭異
按照紋理切片,左上角第一張紋理坐標(biāo),應(yīng)該是
(0,0) (1/6,0)
(0, 1/3) (1/6, 1/3)
我的引擎就是這個(gè)算法,而HGE的hgeAnimation類切片出來卻不是這個(gè)紋理坐標(biāo)
經(jīng)過高人指點(diǎn),D3DX_FILTER_NONE D3DX_FILTER_POINT 的繪制效果是有差別的
左圖為使用D3DX_FILTER_POINT繪制,右圖是D3DX_FILTER_NONE繪制
跟紋理坐標(biāo)之類,沒有太大關(guān)系,關(guān)鍵在于,D3DX_FILTER_POINT需要對紋理進(jìn)行點(diǎn)采樣處理。但為什么采樣后就能保證完整放置在Suface上不發(fā)生拉升呢?是不是D3D一個(gè)BUG?