>From another thread I started with the same complaint, I came up with
this:



Ok, so I wrote a quick function than can be called with a texture
region (as returned by atlas.add) as a parameter.
This will automatically tweak the texture coordinates so that nearby
textures in the atlas aren`t sampled while filtering.
Hope somebody else finds this useful.

def tex_border (tex):
        """ takes a pyglet texture/region and insets the texture
coordinates
by half a texel
                allowing for sub-pixel blitting without interpolation
with nearby
regions within
                same texture atlas """
        coord_width = tex.tex_coords[3] - tex.tex_coords[0]
        coord_height = tex.tex_coords[4] - tex.tex_coords[1]
        x_adjust = (coord_width / tex.width) / 2.0      # get tex
coord half texel
width
        y_adjust = (coord_height / tex.height) / 2.0    # get tex
coord half
texel width
        # create new 12-tuple texture coordinate
        tex.tex_coords = (      tex.tex_coords[0]+x_adjust,
tex.tex_coords
[1]+y_adjust, 0,
                                                tex.tex_coords[3]-
x_adjust, tex.tex_coords[4]+y_adjust, 0,
                                                tex.tex_coords[6]-
x_adjust, tex.tex_coords[7]-y_adjust, 0,
                                                tex.tex_coords
[9]+x_adjust, tex.tex_coords[10]-y_adjust, 0)

atlas = pyglet.image.atlas.TextureAtlas (width=1024, height=1024)
pic = pyglet.image.load('bug.png')
bug_tex = atlas.add (small_red_bug_pic)
tex_border (bug_tex)


On Dec 1, 1:08 am, Jonathan Hartley <[email protected]> wrote:
> I see, thanks.
>
> Yeah, removing the texture from the atlas does fix it. I'd like to
> keep the framerate if I'm able to though
>
> Ahar! So adding a blank 1-pixel tall image to the atlas between each
> horizontal row of textureregions seems to make it go away.
>
>         from pyglet.image import load, SolidColorImagePattern
>         SPACER = SolidColorImagePattern((0, 0, 0, 0)).create_image
> (1024, 1)
>
>         for filename in glob('%s/*.png' % (IMAGES_DIR)):
>             self.atlas.add(SPACER)
>             region = self.atlas.add(load(filename))
>             ....
>
> Not a watertight fix, no doubt, but it seems to work for my particular
> set of images, which aren't likely to change much at this stage.
> Hurrah! Thanks for the pointer Tristam.
>
> On Nov 30, 11:53 pm, Tristam MacDonald <[email protected]> wrote:
>
> > On Mon, Nov 30, 2009 at 4:22 PM, jonathan hartley 
> > <[email protected]>wrote:
>
> > > Hi there list,
>
> > > I noticed that since I started subtly rotating my pyglet sprites (with
> > > images stored in a texture atlas), i am seeing brown artifacts along the
> > > sprite's top edges (here enlarged 8x):
>
> > >http://brokenspell.googlecode.com/svn/trunk/docs/screenshots/unexpect...
> > > I'm talking about the single-pixel straight lines above each duck.
>
> > > I read what Brian wrote on this thread with much interest:
> > >    "Depth buffer tile sorting?"
>
> > >http://groups.google.com/group/pyglet-users/browse_thread/thread/7647...
>
> > > Is what I am seeing perhaps exactly what Brian described?
>
> > Regardless of what Brian described, you are seeing 'pixel bleed' from the
> > next image in the texture atlas, due to the bilinear filtering. Either set
> > the texture filter to GL_NEAREST, or remove your texture from the atlas, and
> > the artefacts should disappear.
>
> > --
> > Tristam MacDonaldhttp://swiftcoder.wordpress.com/

--

You received this message because you are subscribed to the Google Groups 
"pyglet-users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/pyglet-users?hl=en.


Reply via email to