【问题标题】:openGL/Pyglet texture graphics vanish when drawing sprites绘制精灵时,openGL/Pyglet 纹理图形消失
【发布时间】:2013-03-01 05:01:43
【问题描述】:

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

请注意,背景中有一些雾

【问题讨论】:

    标签: python opengl pyglet


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 这就是 Pyglet 和其他高级图形库的问题 - 它们与 OpenGL 本身相距甚远,以至于您不知道引擎盖下发生了什么。我现在已经直接将 C++ 和 OpenGL 用于我的另一个项目,不仅一切都更清晰,而且感觉也更有意义。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-07
      • 2018-08-19
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多