Opengl glTexCoordPointer似乎没有效果

Opengl glTexCoordPointer似乎没有效果,opengl,pyopengl,Opengl,Pyopengl,我仍在努力掌握如何使用纹理,现在我正在尝试使用glTexCoordPointer,以便为每个顶点提供特定于其类的颜色。我做了一些检查,情况如下: self.bufferVertices = glGenBuffersARB(1) glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferVertices) glBufferDataARB(GL_ARRAY_BUFFER_ARB, ADT.arrayByteCount(vertices),

我仍在努力掌握如何使用纹理,现在我正在尝试使用glTexCoordPointer,以便为每个顶点提供特定于其类的颜色。我做了一些检查,情况如下:

    self.bufferVertices = glGenBuffersARB(1)
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferVertices)
    glBufferDataARB(GL_ARRAY_BUFFER_ARB, ADT.arrayByteCount(vertices), ADT.voidDataPointer(vertices), GL_STATIC_DRAW_ARB)
    self.vertices = vertices
    self.bufferNormals = glGenBuffersARB(1)
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferNormals)
    glBufferDataARB(GL_ARRAY_BUFFER_ARB, ADT.arrayByteCount(normals), ADT.voidDataPointer(normals), GL_STATIC_DRAW_ARB)
    self.normals = normals
    self.triangles = triangles
    textureIndexes = [] 
    for int in areas:
        textureIndexes.append(float(int)/190.0) 
        print str(int) + " " + str(float(int)/190)
    print str(len(self.vertices)) + str(len(textureIndexes))    
    self.bufferTextureIndex = glGenBuffersARB(1)
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferTextureIndex)
    glBufferDataARB(GL_ARRAY_BUFFER_ARB, ADT.arrayByteCount(numpy.array(textureIndexes,dtype=numpy.float32)), ADT.voidDataPointer(numpy.array(textureIndexes,dtype=numpy.float32)), GL_STATIC_DRAW_ARB)               
    for color in textureArray:
        print str(color)
    self.texture = glGenTextures(1)
    glBindTexture(GL_TEXTURE_1D, self.texture)
    glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT)
    glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, GL_REPEAT)
    glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
    glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
    glTexImage1D(GL_TEXTURE_1D, 0, GL_RGB, 190, 0, GL_RGB , GL_FLOAT, textureArray)
因此,我为顶点、法线、三角形和纹理索引生成VBO。现在我想检查我得到的TextureIndex的值,所有值都来自间隔[0..1],TextureIndex的长度=长度(顶点)/3

对于纹理,我生成了一个textureArray,它是一个190[x,x,x]rgb值的向量。我甚至把它分成6等份。因此,前1/6个条目是一种颜色,然后是另一种颜色,以此类推,只是为了简化我的测试

现在来看看图纸:

glEnableClientState(GL_VERTEX_ARRAY)         
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferVertices)
    glVertexPointer(3, GL_FLOAT, 0, None)          
    glEnableClientState(GL_NORMAL_ARRAY);
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferNormals)
    glNormalPointer(GL_FLOAT, 0, None)     


    glEnableClientState(GL_TEXTURE_COORD_ARRAY)
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferTextureIndex)
    glTexCoordPointer(1, GL_FLOAT, 0, None);
    glBindTexture(GL_TEXTURE_1D, self.texture)
    glEnable(GL_TEXTURE_1D)
    glClientActiveTexture(GL_TEXTURE0);
    glDrawElements(GL_TRIANGLES, len(self.triangles) , GL_UNSIGNED_SHORT, ADT.voidDataPointer(self.triangles))

但是所有的点都变成了相同的颜色,对应于我的纹理的前1/6部分的颜色。任何意见都将不胜感激。

我很惊讶它竟然能画出任何东西。在以下行中有一个错误:

    glTexImage1D(GL_TEXTURE_1D, 0, GL_RGB, 190, 0, GL_RGB , GL_FLOAT, textureArray)

OpenGL规范要求纹理的大小是二的幂。如果将190替换为256或64,可能会得到更好的结果。

您是否重新启动了问题?完全重复:不一定。仅在较旧的硬件上才需要它(不支持
ARB\u texture\u non\u power\u of two
extension或OpenGL 2.0)。虽然ATI的人似乎对此有点不同;)。但值得一试,因为Bogdan可能使用旧硬件或损坏的ATI卡。我检查了规格,你是对的。然而,我仍然有相当混合的结果与非权力的两个纹理,特别是在我的ATI笔记本电脑(理论上应该支持OpenGL 2…),无论如何,这将是很容易检查,虽然它可能不是问题。感谢观察。我的图形卡支持OpenGL 2.0,所以没有问题。但是,应用程序也应该能够在旧卡上运行,因此这将是一个问题。