from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * import sys W,H = 300,300 class glPrinter: def __init__(self): self.size = 0.02 self.color = [0,0,0] self.font = GLUT_BITMAP_HELVETICA_10 def __call__(self, x, y, message): glPushMatrix(); glPushAttrib(GL_LIGHTING_BIT | GL_CURRENT_BIT) glDisable(GL_LIGHTING); glColor3(self.color) if self.font in [GLUT_STROKE_ROMAN, GLUT_STROKE_MONO_ROMAN]: glLineWidth(2.0) glTranslatef(x, y, 0); glScalef(self.size,self.size,self.size); for m in message: glutStrokeCharacter(self.font, ord(m)) else: glRasterPos2(x,y) for m in message: glutBitmapCharacter(self.font, ord(m)) glPopAttrib() glPopMatrix(); pr_bitmap = glPrinter() pr_stroke = glPrinter() pr_stroke.font = GLUT_STROKE_ROMAN pr_stroke.size = .2 cnt = 0 def display(): global cnt cnt += 1 glutSetWindowTitle('Rendering #%d' % cnt) glClear(GL_COLOR_BUFFER_BIT) pr_bitmap.font = GLUT_BITMAP_HELVETICA_10 pr_bitmap.color = (1,0,0) pr_bitmap(W*.5,H*.5,'Some bitmapped text') pr_stroke(W*.1,H*.1,'Some stroked text') # glut.py lists all the available fonts pr_bitmap.font = GLUT_BITMAP_TIMES_ROMAN_24 pr_bitmap.color = (0,1,0) pr_bitmap(W*.03,H*.8,'Some more bitmapped text') glFlush() def myInit(): glClearColor(1,1,1,0) def reshape(w,h): # need this global declaration to be able to change the # global variables global W,H W,H = w,h glViewport(0,0,w,h) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluOrtho2D(0,w,0,h) glMatrixMode(GL_MODELVIEW) def main(): glutInit([]) glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB) glutInitWindowSize(W,H) glutInitWindowPosition(300,100) glutCreateWindow(sys.argv[0]) glutReshapeFunc (reshape) glutDisplayFunc (display) myInit() glutMainLoop() if __name__ == '__main__': main()