用OpenGL画五角星

第一次写博客,正在上大二,学的计算机专业,因为课很杂,想把自己学过的东西顺便写下来做个记录,写的不好请见谅!


这个学期学的图形学,主要是讲OpenGL的东西,老师让我们自己用GL_LINES、GL_LINE_LOOP、GL_LINE_STRIP等方式画一些自己觉得好看的图形(由于不是教程文章,就不解释这些方法的意思和其他基本的东西了),于是理科生的我想了想也就只能想到五角星了。。。


刚开始有两种思路,一种是确定十个点,分别是五角星的五个凸点和五个凹点,然后用LOOP方法依次连接,第二种方法是只用找五个凸点,在连接的时候像我们平时手画五角星那样连接(假如从最高点为A,依次顺时针为B、C、D、E,那么就按照ACEBD的顺序连接,如下图),两种方法我都尝试过,各有优势吧。

下面这个是方法一的效果图:

首先说第一种方法吧,原理很简单,想象有两个同心圆,一个半径设为R=0.5f,另一个为r=0.2f,大圆上取五个等差点作为凸点,小圆上取五个点作为凹点,并且每个凸点和对应的凹点(如A与a)x与y坐标取负,也就是关于原点对称。

然后根据R和r求出五个点的坐标,如图:
求点的坐标只需要将每个点的角度找到,带入x=R*cosα、y=R*sinα即可。

首先给出R、r和Pi的值:

const GLfloat R = 0.5f;
const GLfloat r = 0.2f;
const GLfloat Pi = 3.1415926536f;

为方便,我写了一个函数GetPoint来计算x和y的值:
GLfloat GetPointCos(GLfloat R, int angle) {return (R*cos(angle * Pi / 180));
}
GLfloat GetPointSin(GLfloat R, int angle) {return (R*sin(angle * Pi / 180));
}
确定了R和角度angle,便可以找到该点的x和y,上图的B点角度为18°,其他点分别为A 0°,C 54°,D与C关于y轴对称,E与B关于y轴对称。而小圆上的点abcde则分别与ABCDE关于原点对称,因此:

        GLfloat pointA[2] = { 0, R };GLfloat pointB[2] = { GetPointCos(R, 18), GetPointSin(R, 18) };GLfloat pointC[2] = { GetPointCos(R, 54), -GetPointSin(R, 54) };GLfloat pointD[2] = { -GetPointCos(R, 54), -GetPointSin(R, 54) };GLfloat pointE[2] = { -GetPointCos(R, 18), GetPointSin(R, 18) };GLfloat pointa[2] = { 0, -r };GLfloat pointb[2] = { -GetPointCos(r, 18), -GetPointSin(r, 18) };GLfloat pointc[2] = { -GetPointCos(r, 54), GetPointSin(r, 54) };GLfloat pointd[2] = { GetPointCos(r, 54), GetPointSin(r, 54) };GLfloat pointe[2] = { GetPointCos(r, 18), -GetPointSin(r, 18) };

好了,准备工作都做完了,现在就开始连线形成图形了。
如刚开始说的,我们要将这十个点按照AdBeCaDbEc的顺序依次连接(这一步如果有疑问可以画图看看),使用GL_LINE_LOOP的方法,代码如下:
        glBegin(GL_LINE_LOOP);glVertex2fv(pointA);glVertex2fv(pointd);glVertex2fv(pointB);glVertex2fv(pointe);glVertex2fv(pointC);glVertex2fv(pointa);glVertex2fv(pointD);glVertex2fv(pointb);glVertex2fv(pointE);glVertex2fv(pointc);glEnd();

最后别忘了调用glFlush()函数!!!

接下来的第二种方法就简单许多了,只需要把abcde五个点去掉,然后在连线阶段按照ACEBD的顺序依次连接就完成了,具体代码就不再给出了,大家可以自己试试!

好吧,第一次的博客就写到这里了,写这些的初衷只是为了记录自己学习的过程,也为了能在网上和大家共同交流共同学习,可能有些地方描述的还不够详细,或者方法不够简洁,以后会更加努力的,谢谢大家支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/250859.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

画七彩五角星

using (Graphics graphics this.CreateGraphics()){graphics.Clear(Color.White); Point[] points {//顺时针点坐标new Point(80, 0), new Point(100, 60), new Point(160, 60), new Point(110, 100),new Point(130, 160), new Point(80, 120), new Point(30, 160), new Poi…

【C语言】结构体——我就是秩序的创建者!(结构体数组、结构体指针、嵌套、匿名、字面量、伸缩型数组、链式结构)

一、结构体基础1.1 声明和定义1.1 初始化和赋值1.3 访问结构体成员 二、结构体数组2.1 定义和初始化2.2 访问 三、结构体的嵌套五、指向结构体的指针六、向函数传递结构体6.1 只传递结构体成员6.2 传递结构体指针6.3 传递结构体 七、结构体的其他特性——不容小觑7.1 结构体的大…

阿里云的云安全审计可以用于哪些安全事件与合规审核?

阿里云的云安全审计可以用于哪些安全事件与合规审核? [本文由阿里云代理商[聚搜云www.4526.cn]撰写] 随着互联网的高速发展,各种互联网应用和服务也在不断涌现。但在运营过程中,安全事件和合规审核问题也不断出现。如何及时、准确地识别并解决…

通俗易懂讲PIC单片机:从一窍不通到入门进步

单片机入门不难------谈PIC系列(转自矿石收音机论坛---崂山)十年前的老帖子,讲得通俗易懂,分享之。 请看图1 这个8条腿的小螃蟹就是我们的第一顿饭,只要把它吃下去,以后的大餐就好办了。第1、8条腿接电源 …

PIC单片机-Mplab的使用与PIC单片机介绍

内容包括Mplab IDE与Mplab X IDE的使用,触摸功能实践,PIC单片机C与汇编混合编程,PIC单片机介绍等。紫色文字是超链接,点击自动跳转至相关博文。持续更新,原创不易! 目录: 一、Mplab IDE的使用…

单片机之汇编语言和C语言(以PIC单片机为例)

目录 计算机语言计算机语言类别中断定时/计数器 C语言数据类型C语言动态数组C语言中void什么意思C语言宏定义单片机C语言的扩充数据类型单片机C语言的运算符单片机C语言的基本语句单片机汇编语言基本语句(PIC)PIC单片机基础概念PIC16F887(40引…

【转】PIC单片机C语言简记

1.PICC安装: PICC编译器可以直接挂接在MPLAB-IDE集成开发平台下,实现一体化的编译连接和原代码调试。使用MPLAB-IDE内的调试工具ICE2000 、ICD2 和软件模拟器都可以实现原代码级的程序调试,非常方便。 首先必须在你的计算机中安装 PICC 编…

PIC单片机入门_C语言编程技术

1.为什么也是C语言? 用C 语言来开发单片机系统软件最大的好处是编写代码效率高、软件调试直观、维护升级方便、代码的重复利用率高等,因此C 语言编程在单片机系统设计中越来越广泛的运用。PIC 单片机的软件开发,同样可以用C 语言实现。 Micro…

PIC单片机与PIC单片机C语言编程简介

对于计算机学院与电子学院相关的同学来说,单片机一定不是一个陌生的概念。在大学的学习生涯中,经常用于教学的是MCS-51系列单片机。其实,除了MCS-51单片机外,还有一类单片机——PIC单片机。 PIC单片机,英文名为Periphe…

Python知识回顾(10)

Day 10 本节主要讲解的是Python中文件操作(IO 技术)方面的知识。 文章目录 1.文件的处理1.1.1 文本文件和二进制文件1.1.2 文件操作相关模块概述1.3 创建文件对象 open()1.4 文本文件的写入1.5 常用编码介绍1.5.1 中文乱码问题1.5.2 write()/writelines()写入数据1.5.3 close(…

安卓手机阅读器_得到电纸书阅读器到底如何,值不值得买?使用一个月后,我告诉你答案!...

1 电纸书墨水屏的发展 一直以来,这世界上只有两种电纸书阅读器(电子书阅读器),一种是Kindle,另一种是其他。当然索尼的电子纸也不错,不过它的定位和价格已经不是普通的看电子书了。 自2007年第一代Kindle问世,如今已经将近13年过去了。Kindle有了更高的知名度,也有了更…

HNU-电子测试平台与工具2-串口实验5次

计算机串口使用与测量 【实验属于电子测试平台与工具】 湖南大学信息科学与工程学院 计科 210X wolf (学号 202108010XXX) 0.环境搭建 在实验开始之前,安装好Ubuntu 20.04操作系统。(这个没有难度) 但要提醒的是,这个ubuntu是xubuntu,而且虚拟硬盘只有10GB的大小…

Java开发 - 让你少走弯路的Redis的主从复制

前言 大家举举手,让我看看还有多少人不会配置Redis的主从,主主这些的。故事发生在前段时间,小伙伴看到了博主的MySQL主从,就问博主有没有Redis的主从配置教程,本以为网上到处都是教程的博主打开网页一搜,好…

程序员の诗 - 启蒙

启蒙 一入挨踢(IT)门,从此断红尘。 网络席卷人生路,代码看似少年梦。 面朝电脑黑眼圈,一坐又是一整天。 错把代码当成梦,写尽半生皆是空。 然, 机器识 0 1,吾辈创世界&#xf…

linux恶搞指令

alias 指令 linux命令提供了一个有用的工具alias,让我们将需要频繁使用但又过于冗长的命令设置一个别名,以后只需要输入一个简单的别名就可以达到同样的作用 alias 查看当前设置的所有别名 alias cdtest‘cd /src/www/app/account’ 等号两边不能有空格 unalias c…

我爱优雅的代码,我爱搞笑的诗词

天王盖地府,小鸡炖蘑菇,拿了此大奖,才是最幸福。 也不知道什么原因,平时总爱写写各种好玩的东西,作为程序员,也许是一个放松的方式吧,我不喜欢做一个只会写代码的码农,我喜欢能在各个…

用计算机术语写诗,网上盛行写诗软件 电脑作诗毫无逻辑令人喷饭

自从“诗坛芙蓉”赵丽华(BLOG)红遍网络之后,诗歌——一个几乎被忽略的文学体裁又重新引起了大家的关注。 昨日(27日),记者在浏览网站时发现,目前网络上一款写诗软件十分盛行, 只要输入几个关键字,电脑就自动写出一首诗…

机器学习知识经验分享之五:R语言安装

python语言用于深度学习较为广泛,R语言用于机器学习领域中的数据预测和数据处理算法较多,后续将更多分享机器学习数据预测相关知识的分享,有需要的朋友可持续关注,有疑问可以关注后私信留言。 目录 一、R语言介绍 二、R语言安装…

上海斯歌K2 x 赛博威 | 战略合作深度交流暨签约仪式

2月16日,上海斯歌K2与赛博威进行了战略合作深度交流,并在赛博威广州科学城办公室举办战略合作签约仪式。 为满足客户在数智化建设过程中的多元化需求,上海斯歌K2与赛博威曾多次产生交集。凭借双方多年合作的良好基础,自2022年始&a…

Eclipse教程 Ⅸ

今天继续来学习Eclipse 快速修复、Eclipse 浏览菜单、Eclipse 查找以及Eclipse 悬浮提示的内容!老规矩,废话不多说,开始吧。 Eclipse 快速修复 使用快速修复 在 Eclipse 编辑器中当你输入字母时,编辑器会对你输入的内容进行错误…