PyOpenGL:多维数据集纹理是纯色

问题描述

我正在向立方体添加纹理,但是一直遇到这个问题

enter image description here

我真的不知道为什么会这样,并且想知道是否还有其他人可以帮助您。

以下是我的一些代码段:

用于生成立方体顶点的函数

def cube_vertices(x,y,z,n):
    """ Return the vertices of the cube at position x,z with size 2*n."""
    return [
        [x+n,y-n,z-n],[x+n,y+n,[x-n,z+n],]

用于生成多维数据集的功能

def Cube(cubeverts):
    glEnable(GL_TEXTURE_2D)
    glBegin(GL_QUADS)
    for surf in surfs:
        for vertex in surf:
            glTexCoord2f(0.0,1.0)
            glVertex3fv(cubeverts[vertex])
    glEnd()

和制作纹理的功能

def get_texture(texturename,width=16,height=16):
    img = Image.open(texturename)
    img_data = numpy.array(list(img.getdata()),numpy.int8)
    textID = glGenTextures(1)
    glBindTexture(GL_TEXTURE_2D,textID)
    glPixelStorei(GL_UNPACK_ALIGNMENT,1)
    glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP)
    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)
    glTexImage2D(GL_TEXTURE_2D,GL_RGB,width,height,GL_RGBA,GL_UNSIGNED_BYTE,img_data)
    return textID

解决方法

我能够通过添加来解决此问题

if n == 0:
    xv = 0.0
    yv = 0.0
if n == 1:
    xv = 1.0
    yv = 0.0
if n == 2:
    xv = 1.0
    yv = 1.0
if n == 3:
    xv = 0.0
    yv = 1.0

到冲浪循环中的顶点

最终立方函数:

def Cube(cubeverts):
    glBegin(GL_QUADS)
    for surf in surfs:
        n = 0
        for vertex in surf:
            if n == 0:
                xv = 0.0
                yv = 0.0
            if n == 1:
                xv = 1.0
                yv = 0.0
            if n == 2:
                xv = 1.0
                yv = 1.0
            if n == 3:
                xv = 0.0
                yv = 1.0
            glTexCoord2f(xv,yv)
            glVertex3fv(cubeverts[vertex])
            n += 1
    glEnd()