1 #include "gl/glut.h"
  2 #define NO 0
  3 #define YES 1
  4 
  5 int Drawing;
  6 
  7 void Initialization()
  8 {
  9     glClearColor(0.0f,0.0f,0.0f,1.0f);
 10 
 11     glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_DST_ALPHA);
 12 
 13     glEnable(GL_POINT_SMOOTH);           //启用点反走样
 14     glHint(GL_POINT_SMOOTH_HINT,GL_NICEST);
 15 
 16     glEnable(GL_LINE_SMOOTH);            //启用直线反走样,初始化函数中所调用的那3条命令才真正起作用
 17     glHint(GL_LINE_SMOOTH_HINT,GL_NICEST);
 18 
 19 
 20     Drawing=NO;
 21 }
 22 
 23 void OnDisplay(void)
 24 {
 25     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 26 
 27     glMatrixMode(GL_MODELVIEW);
 28     glLoadIdentity();
 29 
 30     if(Drawing==YES)            //启用混合状态,初始化函数中所调用的那3条命令才真正起作用
 31         glEnable(GL_BLEND);
 32     else                        //关闭混合状态
 33         glDisable(GL_BLEND);
 34 
 35     glColor4f(1.0f,0.0f,0.0f,1.0f); //当前绘图色为绿色
 36 
 37     glLineWidth(10);
 38     glBegin(GL_LINE_STRIP);
 39         glVertex2f(-3.0f,-0.5f);
 40         glVertex2f(0.0f,0.5f);
 41         glVertex2f(3.0f,-0.5f);
 42     glEnd();
 43     
 44     glPointSize(10);
 45     glBegin(GL_POINTS);
 46         glVertex2f(0.0f,1.0f);
 47     glEnd();
 48 
 49     glutSwapBuffers();
 50 }
 51 
 52 void OnReShape(int w,int h)
 53 {
 54     glViewport(0,0,w,h);
 55     
 56     glMatrixMode(GL_PROJECTION); //将当前矩阵指定为投影模式
 57     glLoadIdentity();
 58     
 59     if (h!=0)
 60     {
 61         GLfloat aspect =(float)w/(float)h;
 62 
 63         if(w<h)
 64             gluOrtho2D(-3,3,-3*aspect,3*aspect);
 65         else
 66             gluOrtho2D(-3/aspect,3/aspect,-3,3);
 67 
 68     }
 69     glMatrixMode(GL_MODELVIEW);
 70     glLoadIdentity();
 71 }
 72 
 73 void CreateMenu(void)
 74 {
 75     glutAddMenuEntry("正常显示",NO);
 76     glutAddMenuEntry("反走样",YES);
 77 
 78     glutAttachMenu(GLUT_RIGHT_BUTTON);
 79 }
 80 
 81 void OnMenu(int value)
 82 {
 83     Drawing=value;
 84     glutPostRedisplay();
 85 }
 86 
 87 void main(int argc,char* argv[])
 88 {
 89     glutInit(&argc,argv);
 90     glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
 91     glutInitWindowSize(600,480);
 92     glutCreateWindow("OpenGL反走样");
 93     
 94     glutReshapeFunc(OnReShape);
 95     glutDisplayFunc(OnDisplay);
 96     glutCreateMenu(OnMenu);
 97     
 98     Initialization();
 99     CreateMenu();
100 
101     
102     glutMainLoop();
103 }
 posted on 2012-04-17 20:50  xiacl  阅读(1099)  评论(0编辑  收藏  举报