2012-07-24 97 views
1

我的代码绘制了一个3D世界,其上有一组2D图形。 3D世界是做出来纹理四边形和纹理用下面的代码生成:当绘制小精灵时,openGL/Pyglet纹理图形消失

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只具有不同coords)使用得出:

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

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

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

Broken textures 注意,有在后台

回答

2

一些雾气,我发现了一个解决这个,通过启用纹理运行glDisable(texture.target),他们被吸引了。这并不理想,因为它们必须再次重新启用,但现在它可以正常工作。

1

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

+0

这就是Pyglet和其他高级图形库的问题 - 它们远离OpenGL本身,你不知道在阀帽下发生了什么。我现在已经开始使用C++和OpenGL直接为我的一个不同的项目,不仅一切都更清晰,但它也感觉更有价值。 – UbunTom 2013-03-01 22:48:21