fontdemo.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:3k
源码类别:

GIS编程

开发平台:

Visual C++

  1. /* Copyright (c) Mark J. Kilgard, 1994. */
  2. /* This program is freely distributable without licensing fees 
  3.    and is provided without guarantee or warrantee expressed or 
  4.    implied. This program is -not- in the public domain. */
  5. #include <string.h>
  6. #include <stdio.h>
  7. #include <stdarg.h>
  8. #include <GL/glut.h>
  9. void
  10. bitmap_output(int x, int y, char *string, void *font)
  11. {
  12.   int len, i;
  13.   glRasterPos2f(x, y);
  14.   len = (int) strlen(string);
  15.   for (i = 0; i < len; i++) {
  16.     glutBitmapCharacter(font, string[i]);
  17.   }
  18. }
  19. void
  20. stroke_output(GLfloat x, GLfloat y, char *format,...)
  21. {
  22.   va_list args;
  23.   char buffer[200], *p;
  24.   va_start(args, format);
  25.   vsprintf(buffer, format, args);
  26.   va_end(args);
  27.   glPushMatrix();
  28.   glTranslatef(x, y, 0);
  29.   glScalef(0.005, 0.005, 0.005);
  30.   for (p = buffer; *p; p++)
  31.     glutStrokeCharacter(GLUT_STROKE_ROMAN, *p);
  32.   glPopMatrix();
  33. }
  34. void
  35. display(void)
  36. {
  37.   glClear(GL_COLOR_BUFFER_BIT);
  38.   bitmap_output(40, 35, "This is written in a GLUT bitmap font.",
  39.     GLUT_BITMAP_TIMES_ROMAN_24);
  40.   bitmap_output(30, 210, "More bitmap text is a fixed 9 by 15 font.",
  41.     GLUT_BITMAP_9_BY_15);
  42.   bitmap_output(70, 240, "                Helvetica is yet another bitmap font.",
  43.     GLUT_BITMAP_HELVETICA_18);
  44.   glMatrixMode(GL_PROJECTION);
  45.   glPushMatrix();
  46.   glLoadIdentity();
  47.   gluPerspective(40.0, 1.0, 0.1, 20.0);
  48.   glMatrixMode(GL_MODELVIEW);
  49.   glPushMatrix();
  50.   gluLookAt(0.0, 0.0, 4.0,  /* eye is at (0,0,30) */
  51.     0.0, 0.0, 0.0,      /* center is at (0,0,0) */
  52.     0.0, 1.0, 0.);      /* up is in postivie Y direction */
  53.   glPushMatrix();
  54.   glTranslatef(0, 0, -4);
  55.   glRotatef(50, 0, 1, 0);
  56.   stroke_output(-2.5, 1.1, "  This is written in a");
  57.   stroke_output(-2.5, 0, " GLUT stroke font.");
  58.   stroke_output(-2.5, -1.1, "using 3D perspective.");
  59.   glPopMatrix();
  60.   glMatrixMode(GL_MODELVIEW);
  61.   glPopMatrix();
  62.   glMatrixMode(GL_PROJECTION);
  63.   glPopMatrix();
  64.   glMatrixMode(GL_MODELVIEW);
  65.   glFlush();
  66. }
  67. void
  68. reshape(int w, int h)
  69. {
  70.   glViewport(0, 0, w, h);
  71.   glMatrixMode(GL_PROJECTION);
  72.   glLoadIdentity();
  73.   gluOrtho2D(0, w, 0, h);
  74.   glScalef(1, -1, 1);
  75.   glTranslatef(0, -h, 0);
  76.   glMatrixMode(GL_MODELVIEW);
  77. }
  78. int
  79. main(int argc, char **argv)
  80. {
  81.   glutInit(&argc, argv);
  82.   glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
  83.   glutInitWindowSize(465, 250);
  84.   glutCreateWindow("GLUT bitmap & stroke font example");
  85.   glClearColor(1.0, 1.0, 1.0, 1.0);
  86.   glColor3f(0, 0, 0);
  87.   glLineWidth(3.0);
  88.   glutDisplayFunc(display);
  89.   glutReshapeFunc(reshape);
  90.   glutMainLoop();
  91.   return 0;             /* ANSI C requires main to return int. */
  92. }