旋转精灵会产生伪影

时间:2015-07-09 08:10:36

标签: python-2.7 opengl pyglet

我尝试使用以下代码旋转一个简单的精灵:

test_img = pyglet.resource.image('img.png')
self.test_sprite = pyglet.sprite.Sprite(img=test_img,x=300,y=400, batch=self.main_batch)

def update(self, dt):
    self.test_sprite.rotation -= float(100 * dt)

效果很好,但我看到它旋转时的神器,见下图,左边是静态图像,右边是旋转的那个:

enter image description here

我做了一个快速搜索,我在这里找到了关于它的讨论:

https://groups.google.com/forum/#!topic/pyglet-users/5NiNT1vRHGw

但说实话,我是pyglet的新手,我不知道如何修改上面的代码来删除神器。

更新

我使用以下代码解决了这个问题,但仍然不确定这是否是最好的方法:

test_img = pyglet.resource.image('img.png').get_texture()
glTexParameteri(test_img.target, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
glTexParameteri(test_img.target, GL_TEXTURE_MIN_FILTER, GL_NEAREST)

self.test_sprite = pyglet.sprite.Sprite(img=test_img,x=300,y=400, batch=self.main_batch) 

def update(self, dt): 
   self.test_sprite.rotation -= float(100 * dt)

2 个答案:

答案 0 :(得分:0)

这不是编码问题,而是在您使用的纹理(图集)中的图像周围/之间没有安全边际。您应该在图片周围留一点边距(1个像素就足够了),这样样本过滤不会渗透到邻居,夹住或缠绕。

答案 1 :(得分:0)

老问题,没有upvote?这个问题通常被称为“纹理出血”。

如果有人磕磕绊绊需要解决方案,那么有一个GIMP插件可以处理这个以及边距:

http://registry.gimp.org/node/26044