python - 为什么这段代码不会在 pyopenGL 中显示我的纹理

标签 python opengl textures pyopengl

我正在尝试为我进行多 channel 纹理工作,但现在我可以让简单的纹理工作,任何人都可以通过以下代码来了解发生了什么。此示例仅将多边形显示为白色,而不是有纹理。

def loadTexture(name):

    img = PIL.Image.open(name) # .jpg, .bmp, etc. also work
    img_data = numpy.array(list(img.getdata()), numpy.int8)

    id = glGenTextures(1)
    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_MAG_FILTER, GL_LINEAR)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img.size[0], img.size[1], 0, GL_RGB, GL_UNSIGNED_BYTE, img_data)
    return id

...

tex = loadTexture(/foobar.png)

...

glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glTranslate(0.0, 0.0, -600)
glScale(50.0, 50.0, 50.0)
glRotate(90, 0.0, 0.0, 0.0)

glEnable(GL_TEXTURE_2D)
glBindTexture(GL_TEXTURE_2D, tex)
glBegin(GL_TRIANGLES)

....

glEnd()

最佳答案

设置纹理参数或上传数据时必须调用glBindTexture(GL_TEXTURE_2D, id):

id = glGenTextures(1)
glPixelStorei(GL_UNPACK_ALIGNMENT,1)
glBindTexture(GL_TEXTURE_2D, id)
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_MAG_FILTER, GL_LINEAR)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img.size[0], img.size[1], 0, GL_RGB, GL_UNSIGNED_BYTE, img_data)

关于python - 为什么这段代码不会在 pyopenGL 中显示我的纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9423044/

相关文章:

ios - 响应 iOS 中的 RAM 可用性

php - Python如何获取8位多字节变量大小?

python - 用 h2 标签替换 <strong> 标签

c++ - vsync "wait"(阻塞)在什么时候发生?

C++ Opengl 光照不工作

java - 更改 libgdx 中的图像

opengl - 无法从附加到 FBO 的深度纹理读取深度值

python - 更改 ImageHash Python 库中的哈希大小

python - 正则表达式捕获文本中的数字

c++ - 简单情况下的模板缓冲区行为(GL_ALWAYS、GL_LEQUAL)