2

我正在尝试使用 opengl 函数将纹理映射到 pyglet 中的四边形,但四边形只是显示为白色。

我的代码如下所示:

import pyglet
from pyglet.gl import *

glEnable(GL_TEXTURE_2D)
image = pyglet.image.load("redbrick.png")
texture = image.get_texture()

和我的绘图功能:

def on_draw():
    window.clear()

    glBindTexture (GL_TEXTURE_2D, 13)
    glBegin (GL_QUADS);
    glTexCoord2i (0, 0)
    glVertex2i (0, 0)
    glTexCoord2i (1, 0)
    glVertex2i (100, 0)
    glTexCoord2i (1, 1)
    glVertex2i (100, 100)
    glTexCoord2i (0, 1)
    glVertex2i (0, 100)
    glEnd ()

我做错了什么或错过了将其绘制为白色四边形的问题吗?

4

1 回答 1

4

我看到一些可能是错误的。将完整的代码像一个 pastebin 一样放在里面会很好,但我不能评论这样问......

您的纹理需要制作成opengl纹理。您需要先将图像转换为原始数据格式。当您加载图像时执行 image.get_data(),压缩成下面的一行。这不是最有效的方法,而是一个简单的例子。

绑定纹理集绘制参数后。

然后将数据交给 glTexImage2D 中的显卡。

data=pyglet.image.load("redbrick.png").get_data()
texture_id = glGenTextures(1)
glBindTexture(GL_TEXTURE_2D, texture_id)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (image_width), (image_height), 0, GL_RGBA, GL_UNSIGNED_BYTE, data)

之后,如果您与 texture_id 绑定,您应该能够使用此纹理。就我所见,13 可能什么都不是。提供所有代码,我可能会修改。

于 2012-10-08T12:04:09.490 回答