DX9紋理映射

可惡的紋理偏移,一直困惑的事情。最後仍是得要試驗靠實踐出真知:

問題:
當把1024×1024大小的貼圖,經過紋理矩陣變換,取出來其中的一部分區域。
而後經過標準QUAD將其繪製到到800×600的表面(backbuffer)。
這裏的紋理偏移值該是何值才能保證結果絕對正確毫無偏移。

以StretchRect的結果爲準,通過反覆試驗。獲得uv座標的偏移值應該是:

 0.5 / Size(backbuffer) * Size(通過紋理矩陣轉換後的紋理座標範圍)

總結以下:

經過D3D9文檔知,誤差是0.5個像素(而不是紋素)。
因此關鍵在於,這0.5個像素對應的紋理的尺寸是多少。
總的紋理尺寸(即變換後的紋理座標範圍)/ 繪製表面的尺寸:是每個像素對應的紋理尺寸。
再乘以0.5即爲所求。

目標緩衝區的尺寸若是和紋理尺寸相同,紋理偏移量=0.5/寬或高;
頂點也必須偏移0.5的值,不能出現(0,0)的座標,不然正交投影的計算會出錯。spa

相關文章
相關標籤/搜索