[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