bitfont.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 <GL/glut.h>
  7. void *font = GLUT_BITMAP_TIMES_ROMAN_24;
  8. void *fonts[] =
  9. {
  10.   GLUT_BITMAP_9_BY_15,
  11.   GLUT_BITMAP_TIMES_ROMAN_10,
  12.   GLUT_BITMAP_TIMES_ROMAN_24
  13. };
  14. char defaultMessage[] = "GLUT means OpenGL.";
  15. char *message = defaultMessage;
  16. void
  17. selectFont(int newfont)
  18. {
  19.   font = fonts[newfont];
  20.   glutPostRedisplay();
  21. }
  22. void
  23. selectMessage(int msg)
  24. {
  25.   switch (msg) {
  26.   case 1:
  27.     message = "abcdefghijklmnop";
  28.     break;
  29.   case 2:
  30.     message = "ABCDEFGHIJKLMNOP";
  31.     break;
  32.   }
  33. }
  34. void
  35. selectColor(int color)
  36. {
  37.   switch (color) {
  38.   case 1:
  39.     glColor3f(0.0, 1.0, 0.0);
  40.     break;
  41.   case 2:
  42.     glColor3f(1.0, 0.0, 0.0);
  43.     break;
  44.   case 3:
  45.     glColor3f(1.0, 1.0, 1.0);
  46.     break;
  47.   }
  48.   glutPostRedisplay();
  49. }
  50. void
  51. tick(void)
  52. {
  53.   glutPostRedisplay();
  54. }
  55. void
  56. output(int x, int y, char *string)
  57. {
  58.   int len, i;
  59.   glRasterPos2f(x, y);
  60.   len = (int) strlen(string);
  61.   for (i = 0; i < len; i++) {
  62.     glutBitmapCharacter(font, string[i]);
  63.   }
  64. }
  65. void
  66. display(void)
  67. {
  68.   glClear(GL_COLOR_BUFFER_BIT);
  69.   output(0, 24, "This is written in a GLUT bitmap font.");
  70.   output(100, 100, message);
  71.   output(50, 145, "(positioned in pixels with upper-left origin)");
  72.   glutSwapBuffers();
  73. }
  74. void
  75. reshape(int w, int h)
  76. {
  77.   glViewport(0, 0, w, h);
  78.   glMatrixMode(GL_PROJECTION);
  79.   glLoadIdentity();
  80.   gluOrtho2D(0, w, h, 0);
  81.   glMatrixMode(GL_MODELVIEW);
  82. }
  83. int
  84. main(int argc, char **argv)
  85. {
  86.   int i, msg_submenu, color_submenu;
  87.   glutInit(&argc, argv);
  88.   for (i = 1; i < argc; i++) {
  89.     if (!strcmp(argv[i], "-mono")) {
  90.       font = GLUT_BITMAP_9_BY_15;
  91.     }
  92.   }
  93.   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
  94.   glutInitWindowSize(500, 150);
  95.   glutCreateWindow("GLUT bitmap font example");
  96.   glClearColor(0.0, 0.0, 0.0, 1.0);
  97.   glutDisplayFunc(display);
  98.   glutReshapeFunc(reshape);
  99.   glutIdleFunc(tick);
  100.   msg_submenu = glutCreateMenu(selectMessage);
  101.   glutAddMenuEntry("abc", 1);
  102.   glutAddMenuEntry("ABC", 2);
  103.   color_submenu = glutCreateMenu(selectColor);
  104.   glutAddMenuEntry("Green", 1);
  105.   glutAddMenuEntry("Red", 2);
  106.   glutAddMenuEntry("White", 3);
  107.   glutCreateMenu(selectFont);
  108.   glutAddMenuEntry("9 by 15", 0);
  109.   glutAddMenuEntry("Times Roman 10", 1);
  110.   glutAddMenuEntry("Times Roman 24", 2);
  111.   glutAddSubMenu("Messages", msg_submenu);
  112.   glutAddSubMenu("Color", color_submenu);
  113.   glutAttachMenu(GLUT_RIGHT_BUTTON);
  114.   glutMainLoop();
  115.   return 0;             /* ANSI C requires main to return int. */
  116. }