2015-02-10 100 views
0

我想使用OpenGL呈現RGBA圖標(用於UI)。首先,我使用gimp將圖標縮放爲2的冪。然後,我使用lodepng加載圖標,然後使用OpenGL渲染它(圖標紋理使用GL_LINEAR和GL_LINEAR_MIPMAP_LINEAR)。該圖標呈現,但似乎模糊。OpenGL上的圖標呈現

我想這是由於壞像素擬合。但是,我不知道我能做什麼。

編輯:使用高(16x)MSAA可解決此問題,但性能損失太高。

EDIT2:我使用這個着色器採樣的圖標質地

#version 140 
noperspective in vec2 pos; 

uniform sampler2D tex; 

out vec4 colorOut; 


void main(void){ 
    vec4 v=texture(tex, (pos/2)+vec2(0.5)); 
    colorOut=vec4(v); 
} 
+0

極高的MSAA可能不是解決此問題的方法 - MSAA不會增加紋理採樣的次數,也不會增加每像素運行碎片着色器的次數,但它可能會改變採樣位置。你可能會嘗試一些非常簡單的事情,比如像一個恆定的半像素偏移。 – 2015-02-11 00:37:39

+0

我知道MSAA不是解決方案。但是,使用常量偏移不起作用。 – dv1729 2015-02-11 00:55:11

+0

您在那裏顯示的內容('+ vec2(0.5)')不是半像素偏移量,而是半紋理偏移量。爲了抵消半個像素(技術上而言),您需要知道紋理的尺寸。 '+ vec2(0.5)/ textureSize(tex,0).xy'應該這樣做。 – 2015-02-11 03:13:16

回答

0

九安M.科爾曼的解決方案只是工作(這是很簡單的),但我想縮放圖標以適當的大小在運行時。

我的解決方案是爲每個像素創建幾個(8x8)texel提取,這對於實時應用程序來說太慢了,但由於圖標大小沒有改變,因此可以將其結果緩存到另一個紋理。然後,我只需要獲取每像素的樣本。

結果並不像安東M.科爾曼解決方案那樣敏銳,但它看起來不錯。