1

私のコードは 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()

作業用テクスチャ

しかし、スプライトを描画しようとすると、3D 四角形がテクスチャを失い、白く描画されます。

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

壊れたテクスチャ 背景に霧があることに注意してください

4

2 に答える 2

2

有効なテクスチャが描画された後に glDisable(texture.target) を実行することで、これに対する解決策を見つけました。再度有効にする必要があるため理想的ではありませんが、今のところ問題なく動作します。

于 2012-07-24T22:36:37.000 に答える
1

私はこれと同様の問題に遭遇しました.pygletSpriteクラスは、設定した OpenGL 状態のすべてを無効にする傾向があることがわかりました。スプライトが描画されるたびに、多くのことをリセットする必要があります。

于 2013-02-28T21:01:43.957 に答える