一、实验名称:五角星的绘制

二、实验目的:了解 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函数绘制五角星相关推荐

  1. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(配置数据点抖动显示jitter)实战

    R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(配置数据点抖动显示jitter)实战 目录 R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(配置 ...

  2. R语言使用ggplot2包使用geom_density()函数绘制密度图(连续色彩、离散色彩、梯度色彩)实战(density plot)

    R语言使用ggplot2包使用geom_density()函数绘制密度图(连续色彩.离散色彩.梯度色彩)实战(density plot) 目录 R语言使用ggplot2包使用geom_density( ...

  3. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色自定义配置)实战

    R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色自定义配置)实战 目录 R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框 ...

  4. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(添加均值点)实战

    R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(添加均值点)实战 目录 R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(添加均值点)实战

  5. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(主题模式配置、色彩设置)实战

    R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(主题模式配置.色彩设置)实战 目录 R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜 ...

  6. R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(配置显示均值、中位数)实战

    R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(配置显示均值.中位数)实战 目录

  7. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(设置异常值的形状、颜色)实战

    R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(设置异常值的形状.颜色)实战 目录 R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(设置异常值的 ...

  8. R语言使用ggplot2包使用geom_density()函数绘制分组密度图(自定义调色板、brewer、灰度比例)实战(density plot)

    R语言使用ggplot2包使用geom_density()函数绘制分组密度图(自定义调色板.brewer.灰度比例)实战(density plot) 目录 R语言使用ggplot2包使用geom_de ...

  9. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色调色板配置)实战

    R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色调色板配置)实战 目录 R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框 ...

最新文章

  1. AI爆发前夜的抉择:要赚钱还是要学术?
  2. [leetcode][math] Add Digits
  3. 【图像处理】【计算机视觉】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波...
  4. elasticsearch入门hello world (macos)【一】下载运行
  5. 你真的会用ABAP, Java和JavaScript里的constructor么?
  6. python为什么虚部是j不是i_Python基础02 基本数据类型
  7. 「CodePlus 2017 12 月赛」火锅盛宴
  8. 智慧交通day03-车道线检测实现05:透视变换+代码实现
  9. Batch Size理解
  10. ElasticSearch简单搭建
  11. 我们正在步入谷歌数据时代
  12. JavaWeb-10(会话技术之sessionamp;JSP)
  13. html5的文件操作系统,目录 - 基本操作 - DirectoryEntry《 HTML5:文件系统 》
  14. STM32通过SIM800L向yeelink端上传数据
  15. Elasticsearch优化的一些建议
  16. 5款优秀的免费加密软件
  17. SSL-ZYC 最小步数
  18. aws cloudformation 堆栈集的创建和使用
  19. 用Photoshop制作2寸照片方法
  20. 改进版 | 浅析几种HID硬件攻击

热门文章

  1. lwIP 操作系统模拟层
  2. mysql写错了怎么改
  3. 如何快速成为数据分析师?网友分享亲身经历:有段时间一直认为自己会当一辈子的会计
  4. 股市和期市是两种截然不同的市场机制 ——兼与徐小明先生商榷
  5. 计算机网络导论课后答案,课后练习题参考答案 计算机网络导论.doc
  6. 尼玛!现在的开发商都这样么?
  7. 均值和方差归一化是什么?
  8. Android利用有道API播放英文发音
  9. html5怎么加网页外边框,在HTML5网页中添加CSS边框更改定位
  10. 从授时服务器上获得时间