欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

计算机图形实验室 - 使用 OpenGL 函数绘制五角星图

最编程 2024-05-01 07:37:16
...
1 // OpenGLOld.cpp : 定义控制台应用程序的入口点。 2 // 3 #include <GL/glew.h>//OpenGL库 4 #include <GL/glut.h>//OpenGL辅助库 5 #include <math.h> 6 #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) //这句是不让控制台窗体出现,如果想要出现,去掉即可。 7 8 void init(void) 9 { 10 glClearColor(1.0, 1.0, 1.0, 1.0);//设置背景色白色 11 } 12 void DrawStar(float cx, float cy, float R,float r,float o)//五角星中心坐标x,y,大圆半径,小圆半径,初始角度 13 { 14 15 float x0, y0, x1, y1;// 16 float o0 = o;//大圆对应角度 17 float o1 = o + 0.2 * 3.14;//小圆对应角度 18 for (int i = 0;i <10;i++) 19 { 20 x0 = cx+R * cos(o0);//大圆对应的x坐标 21 y0 = cy+R * sin(o0);//大圆对应y坐标 22 x1 = cx+r * cos(o1);//小圆对应x坐标 23 y1 = cy+r * sin(o1);//小圆对应y坐标 24 if (i % 2 == 0) 25 { 26 glColor3f(1, 0, 0); 27 } 28 else 29 { 30 glColor3f(0.92, 0.89, 0.41); 31 } 32 33 glBegin(GL_POLYGON);//绘制 34 glVertex2f(x0, y0); 35 glVertex2f(x1, y1); 36 glVertex2f(cx, cy); 37 glEnd(); 38 if (i % 2 == 0) 39 { 40 o0 = o0 + 0.4 * 3.14;//大圆对应角度变换 41 } 42 else 43 { 44 o1 = o1 + 0.4 * 3.14;//小圆对应角度变换 45 } 46 47 } 48 49 50 51 } 52 void display(void) 53 { 54 glClear(GL_COLOR_BUFFER_BIT);//清除帧缓存 55 56 DrawStar(300, 300, 120, 50, 0.1*3.14); 57 58 //glFlush();//单缓冲时必须要,说明绘图命令(函数)结束 59 glutSwapBuffers();//交换缓冲(双缓冲时使用) 60 } 61 62 void reshape(int width, int height) 63 { 64 glViewport(0, 0, width, height);//设置视区(窗口内绘图区域) 65 66 glMatrixMode(GL_PROJECTION); 67 glLoadIdentity(); 68 gluOrtho2D(0, width, 0, height);//设置图形数据范围 69 glMatrixMode(GL_MODELVIEW); 70 glLoadIdentity(); 71 } 72 73 void keyboard(unsigned char key, int x, int y) 74 { 75 } 76 77 int main(int argc, char* argv[]) 78 { 79 glutInitWindowPosition(200, 200);//应用程序窗口位置 80 glutInitWindowSize(800, 600);//窗口大小 81 82 glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);//双缓冲,单缓冲为GLUT_SINGLE 83 glutCreateWindow("五角星绘制");//创建窗口,参数为窗口标题 84 init(); 85 86 glutDisplayFunc(display);//图形绘制 87 glutReshapeFunc(reshape);//窗口大小变化 88 glutKeyboardFunc(keyboard);//键盘交互 89 90 glutMainLoop();//必须,进入GLUT事件处理循环 91 92 return 0; 93 }