我正在尝试使用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 ()
我做错了什么或错过了它被画成白色四边形?
答案 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可能一无是处提供所有代码,我可能会修改。