Python 为什么可以';我在pyOpenGL中绘制纹理

Python 为什么可以';我在pyOpenGL中绘制纹理,python,opengl,pyopengl,Python,Opengl,Pyopengl,如果我禁用纹理,它会正确地绘制一个白色立方体,但当我启用纹理时,它不会绘制任何东西(或与背景颜色相同的黑色正方形)。我唯一怀疑的是GL_INT,因为到目前为止,我在项目中只使用了无符号字节 编辑:我的窗口是RGB 这是我的密码: self.texture = glGenTextures(1) glPixelStorei(GL_UNPACK_ALIGNMENT, 1) glPixelStorei(GL_PACK_ALIGNMENT, 1) glBindTexture

如果我禁用纹理,它会正确地绘制一个白色立方体,但当我启用纹理时,它不会绘制任何东西(或与背景颜色相同的黑色正方形)。我唯一怀疑的是GL_INT,因为到目前为止,我在项目中只使用了无符号字节

编辑:我的窗口是RGB

这是我的密码:

    self.texture = glGenTextures(1)
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
    glPixelStorei(GL_PACK_ALIGNMENT, 1)
    glBindTexture(GL_TEXTURE_2D, self.texture)
    pix=[255,255,255,0,0,0,255,255,255,0,0,0]
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glOrtho(0.0, 640, 480, 0.0, 0.0, 100.0)
    glMatrixMode(GL_MODELVIEW)
    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_MIN_FILTER, GL_LINEAR)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL)
    glTexImage2D(GL_TEXTURE_2D, 0, 3, 2, 2, 0, GL_RGB, GL_INT, pix)
    glEnable(GL_TEXTURE_2D)
    glDisable( GL_LIGHTING)
    glBegin(GL_QUADS);
    glTexCoord2i(0, 0); glVertex2i(100, 100)
    glTexCoord2i(0, 1); glVertex2i(100, 200)
    glTexCoord2i(1, 1); glVertex2i(200, 200)
    glTexCoord2i(1, 0); glVertex2i(200, 100)
    glEnd()
    glutSwapBuffers()

好的,您不应该将客户端内存中的图像数据的格式与纹理的内部格式混淆。在您的情况下,使用
3
作为
internalFormat
参数,这是
GL_RGB
的一个不推荐的快捷方式,实际上意味着每个通道的RGB数据为8位

当您使用
GL_INT
作为客户端格式时,总账会将数据转换为内部格式。在本例中,它将把数据解释为标准化整数,因此
INT\u MAX
(大约20亿左右)将映射为1.0。由于您只使用最大255的数字,因此在内部纹理格式中,这些数字最终将为零,因此您的纹理实际上是黑色的


我不知道你到底想干什么。使用比内部格式精度更高的客户端格式几乎从来都不是一个好主意,因为所有的精度都将丢失,并且由于额外的转换,数据传输将更慢。如果您需要更高的精度,您应该实际使用一些每个通道具有更多位的内部格式。但是,我完全不清楚您是否真的想要这样做,特别是因为您使用的是固定功能管道

好的,我通过反复试验发现阵列需要是3D的。这个数组适合我(3*4*3维),我使用glTexImage2Df处理这个:

pix=[[1.0,1.0,0.0],[0.0,0.0,0.0],[1.0,1.0,1.0],[0.0,0.0,0.0],[1.0,1.0,1.0],[0.0,0.0,0.0,0.0],[0.0,0.0,0.0],[1.0,1.0,1.0],[0,0,0.0,