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

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_STROKE_ROMAN;
  8. void *fonts[] =
  9. {GLUT_STROKE_ROMAN, GLUT_STROKE_MONO_ROMAN};
  10. char defaultMessage[] = "GLUT means OpenGL.";
  11. char *message = defaultMessage;
  12. int angle = 0;
  13. void
  14. selectFont(int newfont)
  15. {
  16.   font = fonts[newfont];
  17.   glutPostRedisplay();
  18. }
  19. void
  20. selectMessage(int msg)
  21. {
  22.   switch (msg) {
  23.   case 1:
  24.     message = "abcdefghijklmnop";
  25.     break;
  26.   case 2:
  27.     message = "ABCDEFGHIJKLMNOP";
  28.     break;
  29.   }
  30. }
  31. void
  32. tick(void)
  33. {
  34.   angle -= 2;
  35.   glutPostRedisplay();
  36. }
  37. void
  38. display(void)
  39. {
  40.   int len, i;
  41.   glClear(GL_COLOR_BUFFER_BIT);
  42.   glPushMatrix();
  43.   glRotatef(angle, 0.0, 0.0, 1.0);
  44.   glTranslatef(-750, 0, 0);
  45.   len = (int) strlen(message);
  46.   for (i = 0; i < len; i++) {
  47.     glutStrokeCharacter(font, message[i]);
  48.   }
  49.   glPopMatrix();
  50.   glutSwapBuffers();
  51. }
  52. int
  53. main(int argc, char **argv)
  54. {
  55.   int i, submenu;
  56.   glutInit(&argc, argv);
  57.   for (i = 1; i < argc; i++) {
  58.     if (!strcmp(argv[i], "-mono")) {
  59.       font = GLUT_STROKE_MONO_ROMAN;
  60.     }
  61.   }
  62.   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
  63.   glutInitWindowSize(600, 600);
  64.   glutCreateWindow("anti-aliased stroke font");
  65.   glMatrixMode(GL_PROJECTION);
  66.   glLoadIdentity();
  67.   gluOrtho2D(0, 2000, 0, 2000);
  68.   glMatrixMode(GL_MODELVIEW);
  69.   glEnable(GL_LINE_SMOOTH);
  70.   glEnable(GL_BLEND);
  71.   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  72.   glLineWidth(3.0);
  73.   glTranslatef(1000, 1000, 0);
  74.   glClearColor(0.0, 0.0, 0.0, 1.0);
  75.   glColor3f(1.0, 1.0, 1.0);
  76.   glutDisplayFunc(display);
  77.   glutIdleFunc(tick);
  78.   submenu = glutCreateMenu(selectMessage);
  79.   glutAddMenuEntry("abc", 1);
  80.   glutAddMenuEntry("ABC", 2);
  81.   glutCreateMenu(selectFont);
  82.   glutAddMenuEntry("Roman", 0);
  83.   glutAddMenuEntry("Mono Roman", 1);
  84.   glutAddSubMenu("Messages", submenu);
  85.   glutAttachMenu(GLUT_RIGHT_BUTTON);
  86.   glutMainLoop();
  87.   return 0;             /* ANSI C requires main to return int. */
  88. }