If there is any deformation, I haven`t noticed it.

If you intened on doing any type of sub-pixel blitting/rotation of an
atlas entry, then the benefits of trimming the texture sampling area
outweigh the cons which I haven`t seen with my naked eye. ;)

Let me know how you get on.

On Dec 1, 11:10 am, Jonathan Hartley <[email protected]> wrote:
> Hey bobmitch,
>
> Thanks heaps for that - it sounds like a more robust solution than my
> dirty hack.
>
> I'm still a little hazy on the implications.
>
> So if you apply tex_border() to an TextureRegion in an atlas, and then
> use that TexttureRegion as the image on a sprite, and draw the sprite
> at 1.0 zoom and 0.0 rotation, does the small texture co-ordinate
> offset you have applied result in any visible deformation of the image
> on-screen?
>
> I'll be trying out your code as an alternative to mine when I get home
> tonight.
>
> On Dec 1, 8:43 am, bobmitch <[email protected]> wrote:
>
> > 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