141 lines
3.3 KiB
Python
141 lines
3.3 KiB
Python
|
#!/usr/bin/python
|
||
|
|
||
|
import sys
|
||
|
|
||
|
from OpenGL.GL import *
|
||
|
from OpenGL.GLU import *
|
||
|
from OpenGL.GLUT import *
|
||
|
|
||
|
import FTGL
|
||
|
|
||
|
fonts = []
|
||
|
width = 600
|
||
|
height = 600
|
||
|
|
||
|
def do_ortho():
|
||
|
w, h = width, height
|
||
|
glViewport(0, 0, w, h)
|
||
|
glMatrixMode(GL_PROJECTION)
|
||
|
glLoadIdentity()
|
||
|
size = max(w, h) / 2.0
|
||
|
aspect = float(w) / float(h)
|
||
|
if w <= h:
|
||
|
aspect = float(h) / float(w)
|
||
|
glOrtho(-size, size, -size*aspect, size*aspect, -100000.0, 100000.0)
|
||
|
else:
|
||
|
glOrtho(-size*aspect, size*aspect, -size, size, -100000.0, 100000.0)
|
||
|
glScaled(aspect, aspect, 1.0)
|
||
|
glMatrixMode(GL_MODELVIEW)
|
||
|
glLoadIdentity()
|
||
|
|
||
|
def draw_scene():
|
||
|
string = []
|
||
|
chars = []
|
||
|
|
||
|
chars[:] = []
|
||
|
for i in range(1, 32):
|
||
|
chars.append(chr(i))
|
||
|
string.append("".join(chars))
|
||
|
|
||
|
chars[:] = []
|
||
|
for i in range(32, 64):
|
||
|
chars.append(chr(i))
|
||
|
string.append("".join(chars))
|
||
|
|
||
|
chars[:] = []
|
||
|
for i in range(64, 96):
|
||
|
chars.append(chr(i))
|
||
|
string.append("".join(chars))
|
||
|
|
||
|
chars[:] = []
|
||
|
for i in range(96, 128):
|
||
|
chars.append(chr(i))
|
||
|
string.append("".join(chars))
|
||
|
|
||
|
chars[:] = []
|
||
|
for i in range(128, 160):
|
||
|
chars.append(chr(i))
|
||
|
string.append("".join(chars))
|
||
|
|
||
|
chars[:] = []
|
||
|
for i in range(160, 192):
|
||
|
chars.append(chr(i))
|
||
|
string.append("".join(chars))
|
||
|
|
||
|
chars[:] = []
|
||
|
for i in range(192, 224):
|
||
|
chars.append(chr(i))
|
||
|
string.append("".join(chars))
|
||
|
|
||
|
chars[:] = []
|
||
|
for i in range(224, 256):
|
||
|
chars.append(chr(i))
|
||
|
string.append("".join(chars))
|
||
|
|
||
|
glColor3f(1.0, 1.0, 1.0)
|
||
|
|
||
|
for i, font in enumerate(fonts):
|
||
|
x = -250.0
|
||
|
yild = 20.0
|
||
|
for j in range(0, 4):
|
||
|
y = 275.0 - i * 120.0 - j * yild
|
||
|
if i >= 3:
|
||
|
glRasterPos(x, y)
|
||
|
font.Render(string[j])
|
||
|
elif i == 2:
|
||
|
glEnable(GL_TEXTURE_2D)
|
||
|
glEnable(GL_BLEND)
|
||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
|
||
|
glPushMatrix()
|
||
|
glTranslatef(x, y, 0.0)
|
||
|
font.Render(string[j])
|
||
|
glPopMatrix()
|
||
|
glDisable(GL_TEXTURE_2D)
|
||
|
glDisable(GL_BLEND)
|
||
|
else:
|
||
|
glPushMatrix()
|
||
|
glTranslatef(x, y, 0.0)
|
||
|
font.Render(string[j])
|
||
|
glPopMatrix()
|
||
|
|
||
|
|
||
|
def on_display():
|
||
|
glClear(GL_COLOR_BUFFER_BIT)
|
||
|
do_ortho()
|
||
|
draw_scene()
|
||
|
glutSwapBuffers()
|
||
|
|
||
|
def on_reshape(w, h):
|
||
|
width, height = w, h
|
||
|
|
||
|
def on_key(key, x, y):
|
||
|
if key == '\x1b':
|
||
|
sys.exit(1)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
glutInitWindowSize(width, height)
|
||
|
glutInit(sys.argv)
|
||
|
glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE)
|
||
|
glutCreateWindow("PyFTGL Demo")
|
||
|
glClearColor(0.0, 0.0, 0.0, 0.0)
|
||
|
|
||
|
try:
|
||
|
fonts = [
|
||
|
FTGL.OutlineFont(sys.argv[1]),
|
||
|
FTGL.PolygonFont(sys.argv[1]),
|
||
|
FTGL.TextureFont(sys.argv[1]),
|
||
|
FTGL.BitmapFont(sys.argv[1]),
|
||
|
FTGL.PixmapFont(sys.argv[1]),
|
||
|
]
|
||
|
for font in fonts:
|
||
|
font.FaceSize(24, 72)
|
||
|
except:
|
||
|
print "usage:", sys.argv[0], "font_filename.ttf"
|
||
|
sys.exit(0)
|
||
|
|
||
|
glutDisplayFunc(on_display)
|
||
|
glutReshapeFunc(on_reshape)
|
||
|
glutKeyboardUpFunc(on_key)
|
||
|
|
||
|
glutMainLoop()
|