【问题标题】:PyQt, PyOPENGL: when adding a texture to an area, then other area lost their color and become whitePyQt,PyOPENGL:向一个区域添加纹理时,其他区域会失去颜色并变为白色
【发布时间】:2019-04-10 23:47:13
【问题描述】:

这是纹理设置。

    img1 = Image.open(".\\pictures\\checkboard.jpg")
    img1_data = np.array(list(img1.getdata()), np.int8)
    glGenTextures(2)
    glBindTexture(GL_TEXTURE_2D, 2)
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
    glTexImage2D(GL_TEXTURE_2D, 0, 3, img1.size[0], img1.size[1], 0, GL_RGB, GL_UNSIGNED_BYTE, img1_data)
    # glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP)
    # glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP)
    # glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT)
    # glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL)

当我将此纹理添加到某个区域时,底部区域变为白色。太奇怪了,因为我的底部区域设置为红色 程序。

    glColor3f(1, 0, 0)
    glBegin(GL_QUADS)
    glVertex3f(-0.1, 0.1, 0)
    glVertex3f(-0.1, -0.1, 0)
    glVertex3f(0.1, -0.1, 0)
    glVertex3f(0.1, 0.1, 0)
    glEnd()

【问题讨论】:

标签: python opengl pyqt textures pyopengl


【解决方案1】:

默认情况下纹理的颜色乘以当前颜色,因为默认情况下纹理环境模式(GL_TEXTURE_ENV_MODE)是GL_MODULATE。见glTexEnv

当环境模式更改为GL_DECAL 时,颜色和纹理将根据纹理的 Alpha 通道进行混合。
mixin可以表示为

final_color = color * (1 - texture_color.a) + texture_color *⁢ texture_color.a

final_color = mix(color, texture_color, texture_color.a)

如果你绘制一个四边形,没有设置任何纹理坐标,它们所有的纹理坐标都是相同的,并且具有最后由glTexCoord设置的值。
既然你得到了一个white四边形,看来是贴图坐标位置的纹素是全白的,alpha通道为1(或者贴图没有alpha通道,所以是1默认)。

您必须先禁用纹理,然后再绘制四边形来解决您的问题。见glEnable:

glDisable(GL_TEXTURE_2D)
glColor3f(1, 0, 0)
glBegin(GL_QUADS)
glVertex3f(-0.1, 0.1, 0)
glVertex3f(-0.1, -0.1, 0)
glVertex3f(0.1, -0.1, 0)
glVertex3f(0.1, 0.1, 0)
glEnd()
glEnable(GL_TEXTURE_2D)

【讨论】:

  • 谢谢!我在绘制四边形时禁用纹理,它解决了我的问题。
猜你喜欢
  • 2014-01-27
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多