计算机图形学五角星c语言,计算机图形学实验——利用OpenGL函数绘制五角星
一、实验名称:五角星的绘制
二、实验目的:了解 OpenGL 程序设计结构,掌握编程环
三、境的设置,掌握绘制线段的方法。
四、实验内容:
1.在 VC++ 环境下 ,练习利用 OpenGL 绘制三角形的程序。
2.编程实现绘制一个五角星。(传统 OpenGL 或者 Shader)
五、实验所需基本函数
1.线段绘制
glBegin(GL_LINES);//绘制参数GL_LINES
glVertex2f(30,30);//起始点坐标
glVertex2f(100,100);//终点坐标(两个为一组)
glEnd();
2.填充图像
glBegin(GL_POLYGON);//绘制参数GL_POLYGON
glVertex2f(x0, y0);//顶点坐标1
glVertex2f(x1, y1);//2
glVertex2f(cx, cy);//3
glEnd();
结果为对三个顶点组成的图像进行填充
3.绘制颜色设置
glColor3f(0.92, 0.89, 0.41);//金黄色
六、实验原理
根据小圆半径加角度算出第一个坐标 然后大圆根据半径加一个角度算出第二个点坐标,然后旋转改变角度寻找所有顶点。
代码如下:
1 void DrawStar(float cx, float cy, float R,float r,float o)//五角星中心坐标x,y,大圆半径,小圆半径,初始角度
2 {
3
4 float x0, y0, x1, y1;//
5 float o0 = o;//大圆对应角度
6 float o1 = o + 0.2 * 3.14;//小圆对应角度
7 for (int i = 0;i <10;i++)
8 {
9 x0 = cx+R * cos(o0);//大圆对应的x坐标
10 y0 = cy+R * sin(o0);//大圆对应y坐标
11 x1 = cx+r * cos(o1);//小圆对应x坐标
12 y1 = cy+r * sin(o1);//小圆对应y坐标
13 if (i % 2 == 0)
14 {
15 glColor3f(1, 0, 0);
16 }
17 else
18 {
19 glColor3f(0.92, 0.89, 0.41);
20 }
21
22 glBegin(GL_POLYGON);//绘制
23 glVertex2f(x0, y0);
24 glVertex2f(x1, y1);
25 glVertex2f(cx, cy);
26 glEnd();
27 if (i % 2 == 0)
28 {
29 o0 = o0 + 0.4 * 3.14;//大圆对应角度变换
30 }
31 else
32 {
33 o1 = o1 + 0.4 * 3.14;//小圆对应角度变换
34 }
35
36 }
37
38
39
40 }
七、绘制结果
八、附件
所有代码
1 // OpenGLOld.cpp : 定义控制台应用程序的入口点。
2 //
3 #include //OpenGL库
4 #include //OpenGL辅助库
5 #include
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 }
所有代码
来源:https://www.cnblogs.com/shdwin/p/12512861.html
计算机图形学五角星c语言,计算机图形学实验——利用OpenGL函数绘制五角星相关推荐
- R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(配置数据点抖动显示jitter)实战
R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(配置数据点抖动显示jitter)实战 目录 R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(配置 ...
- R语言使用ggplot2包使用geom_density()函数绘制密度图(连续色彩、离散色彩、梯度色彩)实战(density plot)
R语言使用ggplot2包使用geom_density()函数绘制密度图(连续色彩.离散色彩.梯度色彩)实战(density plot) 目录 R语言使用ggplot2包使用geom_density( ...
- R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色自定义配置)实战
R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色自定义配置)实战 目录 R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框 ...
- R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(添加均值点)实战
R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(添加均值点)实战 目录 R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(添加均值点)实战
- R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(主题模式配置、色彩设置)实战
R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(主题模式配置.色彩设置)实战 目录 R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜 ...
- R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(配置显示均值、中位数)实战
R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(配置显示均值.中位数)实战 目录
- R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(设置异常值的形状、颜色)实战
R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(设置异常值的形状.颜色)实战 目录 R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(设置异常值的 ...
- R语言使用ggplot2包使用geom_density()函数绘制分组密度图(自定义调色板、brewer、灰度比例)实战(density plot)
R语言使用ggplot2包使用geom_density()函数绘制分组密度图(自定义调色板.brewer.灰度比例)实战(density plot) 目录 R语言使用ggplot2包使用geom_de ...
- R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色调色板配置)实战
R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色调色板配置)实战 目录 R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框 ...
最新文章
- AI爆发前夜的抉择:要赚钱还是要学术?
- [leetcode][math] Add Digits
- 【图像处理】【计算机视觉】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波...
- elasticsearch入门hello world (macos)【一】下载运行
- 你真的会用ABAP, Java和JavaScript里的constructor么?
- python为什么虚部是j不是i_Python基础02 基本数据类型
- 「CodePlus 2017 12 月赛」火锅盛宴
- 智慧交通day03-车道线检测实现05:透视变换+代码实现
- Batch Size理解
- ElasticSearch简单搭建
- 我们正在步入谷歌数据时代
- JavaWeb-10(会话技术之sessionamp;JSP)
- html5的文件操作系统,目录 - 基本操作 - DirectoryEntry《 HTML5:文件系统 》
- STM32通过SIM800L向yeelink端上传数据
- Elasticsearch优化的一些建议
- 5款优秀的免费加密软件
- SSL-ZYC 最小步数
- aws cloudformation 堆栈集的创建和使用
- 用Photoshop制作2寸照片方法
- 改进版 | 浅析几种HID硬件攻击