我的代码绘制了一个 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()
但是,当我尝试绘制 Sprite 时,3D 四边形失去了纹理并被绘制为白色。
self.spr=pyglet.sprite.Sprite(pyglet.image.load(os.path.join(img_dir, "largebullet.png")).get_texture())
...
self.spr.draw()
请注意,背景中有一些雾
最佳答案
我找到了一个解决方案,通过在绘制启用的纹理后运行 glDisable(texture.target) 。这并不理想,因为它们必须再次重新启用,但目前可以正常工作。
关于python - 绘制 Sprite 时 openGL/Pyglet 纹理图形消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11639977/