On Apr 11, 7:42 am, "Alex Holkner" <[EMAIL PROTECTED]> wrote:
> On 4/11/08, Richard Jones <[EMAIL PROTECTED]> wrote:
> >  On Fri, 11 Apr 2008, Michael Halle wrote:
> >  > In looking through the sprite code, I saw that computed vertices get
> >  > rounded off to ints, and then passed in integer form to OpenGL.  This
> >  > process happens even when the sprite is scaled and rotated, where
> >  > vertices would in general not fall on pixel boundaries.
>
> >  > Seems like for small sprites, noticeable distortion or bad packing could
> >  > happen.
>
> > So this is something you've not actually observed?

I've observed this when rotating a pyglet.Sprite.

This code demonstrates the problem. The image on the left seems to
pulse in and out.

import pyglet
from pyglet.gl import *
from itertools import *

window = pyglet.window.Window()
image = pyglet.resource.image('simon.jpg')
image.anchor_x, image.anchor_y = image.width*0.5, image.height*0.5
sprite = pyglet.sprite.Sprite(image, x=100, y=100)

def update(T):
    sprite.rotation += 1.0

pyglet.clock.schedule_interval(update, 1.0/30)

x,y = image.anchor_x, image.anchor_y
vertices = (-x, -y, 0), (-x, +y, 0), (+x, +y, 0), (+x, -y, 0)
texcoords = [i for i in izip(*[chain(image.texture.tex_coords, )]*3)]

@window.event
def on_draw():
    window.clear()
    glLoadIdentity()
    sprite.draw()
    glLoadIdentity()
    glTranslatef(200,100,0)
    glRotatef(sprite.rotation, 0, 0, 1)
    glEnable(image.texture.target)
    glBindTexture(image.texture.target, image.texture.id)

    glBegin(GL_QUADS)
    for v, t in izip(vertices, texcoords):
        glTexCoord3f(*t)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
        glVertex3f(*v)
    glEnd()

pyglet.app.run()

>
> >  > As far as I know, graphics cards usually use floats internally anyway --
> >  > are there real performance hits in removing the rounding and just
> >  > passing the floats down to OpenGL?
>
> > The rounding is not done for performance.
>
> >  More often than not you'll get artifacts and fuzziness on raster graphics 
> > if
> >  they're not pixel-aligned. The most common artifact is flickering border
> >  where pixels bleed in from adjacent images (in the same texture).
>
> Even without adjacent images, you'll get this flicker as any high
> frequency parts of the texture (lines, for example) pass in and out of
> pixel alignment.

I've got a hunch (I could be wrong) that this problem can be mitigated
by using a filter on the textures. Something like:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)

--~--~---------~--~----~------------~-------~--~----~
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