繁体   English   中英

绘制精灵时,openGL / Pyglet纹理图形消失

[英]openGL/Pyglet texture graphics vanish when drawing sprites

我的代码绘制了一个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))

然后绘制四边形(另外两个只有不同的坐标):

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()

工作纹理

然而,我然后尝试绘制一个精灵,3D四边形失去纹理,并绘制为白色。

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

破碎的纹理 请注意,背景中有一些雾

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

我遇到了类似的问题,我发现pyglet Sprite类倾向于禁用它设置的OpenGL状态中的所有内容。 每次绘制精灵时都必须重置很多东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM