计算机图形实验室 - 使用 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 }
上一篇: 以史为鉴,可以为师。