将纹理映射到quad opengl和pyglet

时间:2012-10-08 09:31:20

标签: python opengl pyglet

我正在尝试使用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 ()

我做错了什么或错过了它被画成白色四边形?

1 个答案:

答案 0 :(得分: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可能一无是处提供所有代码,我可能会修改。