【问题标题】:Artefacts in texturing in PyOpenGLPyOpenGL中纹理中的伪影
【发布时间】:2013-11-10 11:30:51
【问题描述】:

我使用Python Imaging Library 加载了.ttf 字体。代码如下:

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 创建的窗口上呈现的快照相同。

它显示了一个不需要的边框,一些人工制品。请帮我纠正这个问题。

【问题讨论】:

  • 您是否尝试过创建没有 mipmap 的纹理?

标签: python opengl pyopengl texturing


【解决方案1】:

您是否考虑过使用更合理的换行状态,例如GL_CLAMP_TO_EDGE?我有一种强烈的感觉,这与纹理图像边缘之外的边框颜色有关。

您可以采用多种方法来解决此类问题,从预乘 alpha 到整个图像周围的额外纹素边框,但最简单的方法是 GL_CLAMP_TO_EDGE

GL_CLAMP 就包裹模式而言是个笑话,它不会将纹理坐标的范围限制在纹素中心,当最近的纹素变成边框颜色时,就会发生灾难。不用说,这种行为通常是不可取的。

【讨论】:

  • 我会试试这个谢谢!虽然奇怪的是我在 Windows 8 上测试了相同的代码,得到了我想要的结果,但在 Ubuntu 13.10 中,它的表现并不好。
猜你喜欢
  • 2022-01-21
  • 2015-07-12
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多