【问题标题】:PyOpenGL: Cube Texture Is a Solid ColorPyOpenGL:立方体纹理是纯色
【发布时间】:2020-12-17 19:48:27
【问题描述】:

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

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

这是我的一些代码sn-ps:

生成立方体顶点的函数。

def cube_vertices(x, y, z, n):
    """ Return the vertices of the cube at position x, y, z with size 2*n."""
    return [
        [x+n,y-n,z-n], [x+n,y+n,z-n], [x-n,y+n,z-n], [x-n,y-n,z-n],
        [x+n,y-n,z+n], [x+n,y+n,z+n], [x-n,y-n,z+n], [x-n,y+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_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)
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, img_data)
    return textID

【问题讨论】:

  • glTexCoord2f(0.0,1.0) 所以,所有的纹理坐标都一样?
  • 哎呀,我修好了

标签: python opengl textures pyopengl


【解决方案1】:

我可以通过添加来解决这个问题

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

到 surf 循环中的 for 顶点

最终的立方体函数:

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()

【讨论】:

    猜你喜欢
    • 2021-10-14
    • 2021-11-27
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 2013-09-09
    相关资源
    最近更新 更多