stroke.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:2k
- /* Copyright (c) Mark J. Kilgard, 1994. */
- /* This program is freely distributable without licensing fees
- and is provided without guarantee or warrantee expressed or
- implied. This program is -not- in the public domain. */
- #include <string.h>
- #include <GL/glut.h>
- void *font = GLUT_STROKE_ROMAN;
- void *fonts[] =
- {GLUT_STROKE_ROMAN, GLUT_STROKE_MONO_ROMAN};
- char defaultMessage[] = "GLUT means OpenGL.";
- char *message = defaultMessage;
- int angle = 0;
- void
- selectFont(int newfont)
- {
- font = fonts[newfont];
- glutPostRedisplay();
- }
- void
- selectMessage(int msg)
- {
- switch (msg) {
- case 1:
- message = "abcdefghijklmnop";
- break;
- case 2:
- message = "ABCDEFGHIJKLMNOP";
- break;
- }
- }
- void
- tick(void)
- {
- angle -= 2;
- glutPostRedisplay();
- }
- void
- display(void)
- {
- int len, i;
- glClear(GL_COLOR_BUFFER_BIT);
- glPushMatrix();
- glRotatef(angle, 0.0, 0.0, 1.0);
- glTranslatef(-750, 0, 0);
- len = (int) strlen(message);
- for (i = 0; i < len; i++) {
- glutStrokeCharacter(font, message[i]);
- }
- glPopMatrix();
- glutSwapBuffers();
- }
- int
- main(int argc, char **argv)
- {
- int i, submenu;
- glutInit(&argc, argv);
- for (i = 1; i < argc; i++) {
- if (!strcmp(argv[i], "-mono")) {
- font = GLUT_STROKE_MONO_ROMAN;
- }
- }
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
- glutInitWindowSize(600, 600);
- glutCreateWindow("anti-aliased stroke font");
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluOrtho2D(0, 2000, 0, 2000);
- glMatrixMode(GL_MODELVIEW);
- glEnable(GL_LINE_SMOOTH);
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glLineWidth(3.0);
- glTranslatef(1000, 1000, 0);
- glClearColor(0.0, 0.0, 0.0, 1.0);
- glColor3f(1.0, 1.0, 1.0);
- glutDisplayFunc(display);
- glutIdleFunc(tick);
- submenu = glutCreateMenu(selectMessage);
- glutAddMenuEntry("abc", 1);
- glutAddMenuEntry("ABC", 2);
- glutCreateMenu(selectFont);
- glutAddMenuEntry("Roman", 0);
- glutAddMenuEntry("Mono Roman", 1);
- glutAddSubMenu("Messages", submenu);
- glutAttachMenu(GLUT_RIGHT_BUTTON);
- glutMainLoop();
- return 0; /* ANSI C requires main to return int. */
- }