[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[pygame] [OpenGL] Text, Transparency and Lists
Alex Holkner wrote (re: drawing text in pyOpenGL):
Certainly not by getting the OS to draw font bitmaps. The standard
technique is to render the characters you need to a texture (using
pygame.font or SDL_ttf, for example), and rendering screen-aligned quads
of the textures. pyglyph
(http://www.partiallydisassembled.net/pyglyph/) is a module that does
exactly this.
I downloaded PyGlyph, but it's not clear what to do with it to make it
work. I tried putting the pyglyph subdirectory into
C:\Python24\Lib\site-packages, which allowed me to "import pyglyph", but
attempting to run "hello.py" gave me this:
<code>
Traceback (most recent call last):
File "C:\Code\pyglyph_example\hello.py", line 56, in ?
HelloExample().run()
File "C:\Documents and
Settings\Owner\Desktop\pyglyph-0.1\example\example_base.py", line 60, in run
self.init()
File "C:\Code\pyglyph_example\hello.py", line 30, in init
fonts = pyglyph.font.LocalFontFactory(font_dir)
File "..\pyglyph\font.py", line 117, in __init__
File "..\pyglyph\font.py", line 130, in add
File "..\pyglyph\font.py", line 132, in add
File "..\pyglyph\ttf.py", line 93, in __init__
AttributeError: 'module' object has no attribute 'MAP_SHARED'
</code>
RE TRANSPARENCY:
By the way, my efforts at combining OpenGL and Pygame (plus looking at
NeHe tutorials) have gotten me to this point:
http://kschnee.xepher.net/pics/060916scurvy2.jpg
And now to:
http://kschnee.xepher.net/pics/060916scurvy3.jpg
But there's still a problem with sprite transparency. No matter what
format I use -- GIF, BMP, or PNG -- I can't seem to make OpenGL draw the
sprite WITHOUT black/white areas around it and WITH full solidity in the
areas of the character's actual body. (The properly drawn version in the
sceenshot was Photoshopped in.)
I've put the latest code at:
http://kschnee.xepher.net/code/scurvy.py
and
http://kschnee.xepher.net/code/OpenGL_Tools.py
if you want to see/use them. Free license; a simpler version of this
would work as a Python translation of NeHe 43, which I of course
stumbled across after coming up with the same thing.
OpenGL somehow locks the display surface so that thou shalt not draw
anything without it. Is there some way to use normal Pygame drawing
methods to apply my existing code for windows, etc., or at least to
switch to OpenGL's Ortho mode and then just put an image on the screen
without going through the process of loading it as an OpenGL texture and
worrying about having it loaded repeatedly, assigned to a textre number
etc.?
RE LISTS:
I'm having trouble using display lists by the normal method! I have a
simple gradient background, so I figured I'd make that a list first:
<code>
def BuildList_Background(self):
self.draw_lists["background"] = glGenLists(1)
glNewList(self.draw_lists["background"],GL_COMPILE)
## Drawing stuff omitted.
glEndList()
def DrawBackground(self):
glCallList(self.draw_lists["background"])
</code>
When I call the first function up front and then the second every frame,
nothing seems to get drawn! What's going on?
Kris