2013-10-30 28 views
1

我已使用Python Imaging Library加載.ttf字體。下面是代碼:PyOpenGL紋理中的人工製品

self.rect = Image.new("RGBA", (600,100), (255,255,255)) 
self.draw = ImageDraw.Draw(self.rect) 
self.font = ImageFont.truetype("font.ttf", 96) 
self.draw.text((5,0), "activatedgeek", (0,0,0), font=self.font) 
self.texture = self.loadFont(self.rect) 

這裏在各個類的loadFont()功能:

def loadFont(self, im): 
     try: 
      ix, iy, image = im.size[0], im.size[1], im.tostring("raw", "RGBA", 0, -1) 
     except SystemError: 
      ix, iy, image = im.size[0], im.size[1], im.tostring("raw", "RGBX", 0, -1) 

     retid = gl.glGenTextures(1) 
     gl.glPixelStorei(gl.GL_UNPACK_ALIGNMENT,1) 
     gl.glBindTexture(gl.GL_TEXTURE_2D,retid) 
     gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR_MIPMAP_LINEAR) 
     gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_LINEAR_MIPMAP_LINEAR) 
     gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_WRAP_S, gl.GL_CLAMP) 
     gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_WRAP_T, gl.GL_CLAMP) 
     gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_GENERATE_MIPMAP, gl.GL_TRUE) 
     gl.glTexImage2D(gl.GL_TEXTURE_2D,0,3,ix,iy,0,gl.GL_RGBA,gl.GL_UNSIGNED_BYTE,image) 
     return retid 

這裏是我使用glReadPixels()不幸作爲一個所再現的使用PyQt創建的窗口上同一拍攝的快照。

Snapshot OpenGL context

它顯示了不必要的邊界,一些人工製品。請幫我糾正這一點。

+0

您是否嘗試過創建沒有mipmap的紋理? –

回答

1

您是否考慮過使用更合理的換行狀態,例如GL_CLAMP_TO_EDGE?我有一種強烈的感覺,認爲這與紋理圖像邊緣以外的邊框顏色有關。

您可以採取多種方法來解決此類問題,範圍從預乘alpha到整個圖像周圍的額外紋理邊界,但最簡單的嘗試是GL_CLAMP_TO_EDGE

GL_CLAMP就包裝模式而言只是一個笑話,它不會將紋理座標的範圍限制到紋理中心,並且當最近的紋理元素變爲邊界顏色時會發生災難。不用說,這種行爲通常是不可取的。

+0

我會試試這個謝謝你!雖然奇怪的是我在Windows 8上測試了相同的代碼,但給了我期望的結果,但在Ubuntu 13.10中,它表現不佳。 – activatedgeek

+0

是的,它確實工作謝謝! – activatedgeek