python - 绘制 Sprite 时 openGL/Pyglet 纹理图形消失

标签 python opengl pyglet

我的代码绘制了一个 3D 世界,其上有一组 2D 图形。 3D 世界由纹理四边形组成,纹理是使用以下代码生成的:

textures = []

image = pyglet.image.load(os.path.join(img_dir, "magic.png"))

textures.append(image.get_texture())

glEnable(textures[-1].target)
glBindTexture(textures[-1].target, textures[-1].id)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image.width, image.height,
    0, GL_RGBA, GL_UNSIGNED_BYTE,
    image.get_image_data().get_data('RGBA',
    image.width * 4))

然后绘制四边形(其他 2 个只是具有不同的坐标):

glBindTexture(texture.target, texture.id)
glBegin(GL_QUADS)
glTexCoord2f(0.0, 0.0); glVertex3f(4.0, -2.0, 100.0+self.clock)
glTexCoord2f(1.0, 0.0); glVertex3f(4.0, -2.0, -100.0+self.clock)
glTexCoord2f(1.0, 1.0); glVertex3f(-4.0,  -2.0, -100.0+self.clock)
glTexCoord2f(0.0, 1.0); glVertex3f(-4.0,  -2.0, 100.0+self.clock)
glEnd()

在绘制 3D 和 2D 图形时,我已经设置了正确的参数,并且当我在 3D 四边形顶部绘制 2D 三角形时(使用以下代码),一切正常:

glBegin(GL_TRIANGLES)
glVertex3f(0.0, 10, 0.0)
glVertex3f(-10, -10, 0)
glVertex3f(10, -10, 0)
glEnd()

Working Textures

但是,当我尝试绘制 Sprite 时,3D 四边形失去了纹理并被绘制为白色。

self.spr=pyglet.sprite.Sprite(pyglet.image.load(os.path.join(img_dir, "largebullet.png")).get_texture())
...
self.spr.draw()

Broken textures 请注意,背景中有一些雾

最佳答案

我找到了一个解决方案,通过在绘制启用的纹理后运行 glDisable(texture.target) 。这并不理想,因为它们必须再次重新启用,但目前可以正常工作。

关于python - 绘制 Sprite 时 openGL/Pyglet 纹理图形消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11639977/

相关文章:

python - 如何根据权重对 networkx 中的边进行排序

python - 如何使用 Pyglet 播放音频(在生成器循环中)?

python - 访问 ipdb 中的类成员

python - 错误值错误 : Property text is required

c++ - 了解 GL_SHADER_STORAGE_BLOCK 绑定(bind)

c++ - OpenGL wgl 中心文本

python - 在 pyglet 中使用 gl_points 滚动星空

python - 一段时间后,pyglet 窗口会因 Schedule_once 挂起

python结合map()的两种逻辑

c++ - 如何阅读 Windows 特定的扩展