我在紋理貼圖/精靈畫面中有一堆緊挨着對方的縮略圖/圖標。從像素到像素的關係,這些像素從145像素平方放大到238像素平方。我在訪問紋理座標時期望在框邊上獲得+ -1或2像素精度,因此我還在縮略圖的頂部繪製了4像素輪廓以隱藏此可能的僞影。但我看到準確度的巨大差異。有時它往往是一個方向,有時是另一個方向。由5-8像素關閉的opengl紋理
我檢查了數學,我無法弄清楚發生了什麼事。
縮略圖正在放大約1.64倍。因此,在源紋理座標中關閉一個像素可能導致屏幕上約2個像素關閉。頂部的4像素白色框架正在以1-1像素到片段的關係繪製,並且應該覆蓋框邊緣兩側的大約2個像素。這部分工作。在這裏,我已經關閉了邊境,以顯示如何遙遠的紋理座標是....
我可以手動調整的數字,讓自己消失。但是我必須將紋理座標寬度/高度縮小几個源像素,並且在某些情況下將5或6像素添加(或減去)起始點。我真的只想讓數學計算出來,或者想知道我在這裏做錯了什麼。這種東西讓我瘋狂!
一堆廢話要知道。
着色器正在做紋理座標在頂點着色器抵消...
這個對象是一個箱,其是三角形條帶2三。
不是說它應該重要,但應用於模型的矩陣沒有進行任何縮放。該框是屏幕比例。縮放僅在正在提供的紋理座標中發生。
上面看到的對象的紋理座標是0.00 - 0.07,然後在着色器中添加了每個縮略圖不同的偏移量。 2048年的0.07就像143.原來我在.0708的時候應該更接近145,它更糟糕,並且顯示出更像來自紋理的148個像素。爲了讓它只顯示145個源像素,我必須使它成爲140像素的0.06835。
我試過在計算器中進行數學運算並直接輸入數字。我也試過像= 1305/2048。這些進入GLfloats不是雙打。
此紋理貼圖的圖像是PNG並裝有這些設置:
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
,但我也試過GL_LINEAR沒有明顯的差異。
我對沒有進行紋理縮放的其他紋理(在同一紋理貼圖中)沒有任何準確性問題。
隨着座標變高,它不會離得越遠。在NEG MAP上方的圖像中,拇指緊挨着HEAT MAP拇指,並且在不同方向上關閉,但在接縫處正確。
這裏是爲這兩個失調數據..
filterTypes[FT_gradientMap20].thumbTexOffsetS = 0.63720703125; filterTypes[FT_gradientMap20].thumbTexOffsetT = 0.1416015625; filterTypes[FT_gradientMap21].thumbTexOffsetS = 0.7080078125; filterTypes[FT_gradientMap21].thumbTexOffsetT = 0.1416015625;
==== ==== UPDATE
一對夫婦的東西了,我意識到我做錯了蝙蝠並在這裏討論:OpenGL Texture Coordinates in Pixel Space
單個縮略圖的寬度是145.但是這將是0-144,145開始下一個。我使用的寬度是145,所以這將是1像素太大。使用上面的像素類型數學中心,我們實際上應該從0的中心到144的中心。144.5 - 0.5 = 144.
使用他的公式(2i + 1)/(2N)每個起點的偏移量並使用144/2048作爲寬度。這讓事情變得更好,但在一些地區仍然沒有。而且有時候和其他時間再次停留在一個方向上。儘管每個x或y位置都一致。
使用143的寬度證明了更好的結果。但我可以通過手動調整數字來解決這些問題。我想有數學來使它正確。
...或..也許它與min/mag過濾有關 - 儘管我對此有所瞭解,並且我正在做的事情似乎適用於這種情況。