[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