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 }
![](https://img2024.cnblogs.com/blog/35695/202403/35695-20240328092537879-1189167464.jpg)