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

GIS编程

开发平台:

Visual C++

  1. /* Copyright (c) Mark J. Kilgard, 1996. */
  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. #include <GL/glc.h>
  8. int font = 1;
  9. char defaultMessage[] = "GLUT means OpenGL.";
  10. char *message = defaultMessage;
  11. int angle = 0;
  12. void
  13. selectFont(int newfont)
  14. {
  15.   font = newfont;
  16.   glutPostRedisplay();
  17. }
  18. void
  19. selectMessage(int msg)
  20. {
  21.   switch (msg) {
  22.   case 1:
  23.     message = "abcdefghijklmnop";
  24.     break;
  25.   case 2:
  26.     message = "ABCDEFGHIJKLMNOP";
  27.     break;
  28.   }
  29. }
  30. void
  31. tick(void)
  32. {
  33.   angle -= 2;
  34.   glutPostRedisplay();
  35. }
  36. void
  37. display(void)
  38. {
  39. #if 0
  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. #else
  51.   glPushMatrix();
  52.   glClear(GL_COLOR_BUFFER_BIT);
  53.   glcRotate(angle);
  54.   glRasterPos2f(100, 100);
  55.   glcFont(font);
  56.   glcRenderString(message);
  57.   glPopMatrix();
  58. #endif
  59.   glutSwapBuffers();
  60. }
  61. int
  62. main(int argc, char **argv)
  63. {
  64.   int submenu;
  65.   glutInit(&argc, argv);
  66.   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
  67.   glutInitWindowSize(600, 600);
  68.   glutCreateWindow("GLC font library demo");
  69.   glMatrixMode(GL_PROJECTION);
  70.   glLoadIdentity();
  71.   gluOrtho2D(0, 2000, 0, 2000);
  72.   glMatrixMode(GL_MODELVIEW);
  73.   glEnable(GL_LINE_SMOOTH);
  74.   glEnable(GL_BLEND);
  75.   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  76.   glLineWidth(3.0);
  77.   glTranslatef(1000, 1000, 0);
  78.   glClearColor(0.0, 0.0, 0.0, 1.0);
  79.   glColor3f(1.0, 1.0, 1.0);
  80.   glutDisplayFunc(display);
  81.   glutIdleFunc(tick);
  82.   submenu = glutCreateMenu(selectMessage);
  83.   glutAddMenuEntry("abc", 1);
  84.   glutAddMenuEntry("ABC", 2);
  85.   glutCreateMenu(selectFont);
  86.   glutAddMenuEntry("Helvetica", 1);
  87.   glutAddMenuEntry("Courier", 2);
  88.   glutAddMenuEntry("Times", 3);
  89.   glutAddSubMenu("Messages", submenu);
  90.   glutAttachMenu(GLUT_RIGHT_BUTTON);
  91.   glcContext(glcGenContext());
  92.   glcScale(30, 30);
  93.   glcNewFontFromFamily(1, "Helvetica");
  94.   glcNewFontFromFamily(2, "Courier");
  95.   glcNewFontFromFamily(3, "Times");
  96.   glcFont(font);
  97.   glutMainLoop();
  98.   return 0;             /* ANSI C requires main to return int. */
  99. }