实验目的和要求

学会配置GLUT开发库并使用Visual Studio C++开发OpenGL程序。

实验内容和原理

在Windows系统中,配置GLUT库:解压并打开文件夹glut.zip,取出glut.h,glut32.lib,glut32.dll。之后有两种配置方式,一是将以上3个文件分别放在系统盘的相应目录下;二是针对具体项目(本次实验给定项目Ex1)进行配置。

开发OpenGL程序:编译运行项目Ex1,确认无误后修改代码生成以下图形:

主要仪器设备

Visual Studio 2017

Glut压缩包

Ex1 工程

操作方法和实验步骤

配置环境

首先在包含工程文件的文件夹中创建了OpenGL的目录,按照如下分层存放GLUT文件:

为保证工程文件以及该实验内容可以在不同的机器上运行,在VS2017的解决方案里做了如下处理:

注意!!!!该实验是在Release x64版本下实现的,请务必注意运行环境!!!!

五角星的绘制

众所周知OpenGL是只能绘制凸多边形的,对于五角星这样的非凸多边形,只能采取分割成若干凸多边形的方式来绘制。我采取的是分割成五个单位四边形来绘制的。

如下图所示,每一个正五角星都可以贝尔分割成由五个类似于四边形ABCD构成的图形。重点的角度已在图中标出。其中∠ABC=pi/10,∠BAC=pi/5。在绘制五角星之前,我们先确定了两个点——五角星的中心点A以及其中一个顶点B。下面我们通过几何关系求出C、D两个点。

那么通过解三角形,我们可以得出两个关系式:

CH/AH=tan36° CH/BH=tan18°

变形得到:

AH=tan18°/(tan36°+tan18°)* AB

CH=tan36°* AH

这样,我们就可以解出C的坐标,D坐标同理即可。单位四边形的绘制代码实现如下:

下一步是根据一个单位四边形绕点A旋转若干个72°后得到剩余四个四边形,拼成一个五角星。在代码实现中,我定义了一个二维旋转函数rotate2d(),其参数表中包含中心点的坐标以及顶点坐标的指针形式和旋转角度。通过三角变换,可以更新顶点坐标值,从而写入指针中。旋转函数和五角星绘制的具体代码如下:

五角星位置的确定

我参考了我们五星红旗的设计图。然而非常鬼畜的一点是,示例文件中给出的数据显示画出的红色矩形竟然是长宽比1:1?事实上,国旗的长宽比是3:2。于是乎死马当作活马医,暂且就用相同的方法这么画它。

首先将矩形分成四份,其中中心点即为坐标原点(这是一个二维图形,理论上二维坐标就够了,至于第三个坐标参数可以理解为在z=0.5这个平面上)。从图中可以清楚地确定出五个五角星中心点的具体坐标以及大五角星的上方的顶点坐标。其余四个五角星的顶点坐标的确定需要通过解几何关系的方法。其画法为:以四点为圆心,各以一等分为半径,分别作四个圆。在每个圆上各定出五个等距离的点,其中均须各有一点位于大五角星中心点与以上四个圆心的各联结线上。然后用构成大五角星的同样方法,构成小五角星。此四颗小五角星均各有一个角尖正对大五角星的中心点。

具体计算时,先通过反三角函数关系解出夹角,然后用正弦或余弦函数求出连线,减去一个单位圆对应的长度后得到顶点的横纵坐标。国旗绘制五角星部分的代码如下:

实验数据记录和处理

在数据处理方面有一点:因为原矩形给出的比例过于诡异,在后面画五角星确定位置时,对于单位圆的半径大小,采用了十等分的结果而不是十五等份的结果。

实验结果与分析

有一点非常奇特的现象:随着图形窗口的调整,这个图形的比例会发生不同程度的变形:

还不是很清楚这一点怎么解决……因为很多GLUT库的函数还没有很深入地了解和接触,目前查到了这几个函数或许可以解决:

glutReshapFun():用以指定窗口大小调整时的重绘制函数,但是需要先自己注册一个窗口改变的函数,还没有摸索出来这个函数应该怎么写。有时间的话会完善这里。

讨论、心得

在绘制五角星的过程中,还考虑到了其他的方法,也有尝试实现过:

1.绘制一系列单位三角形;

将五角星分解为10个形如△ABD的三角形,共用五角星中心点作为顶点,这样就可以使用GL_TRIANGLE_FAN(连接成扇形的三角形系列)几何图元类型进行填充。

2.外周五个三角形+中心的正五边形;

这种方法比较繁琐,最后没有采用。但显然也是可行的。

另外,关于图形缩放变形的问题,也是值得后续继续讨论的问题。还会继续研究与学习。

♻️ 资源

大小: 1.06MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87404303

基于 C++ OpenGL框架实现五角星绘制【100010595】相关推荐

  1. 基于C++OpenGL实现的五角形绘制

    资源下载地址:https://download.csdn.net/download/sheziqiong/85627846 实验目的和要求 学会配置GLUT开发库并使用Visual Studio C+ ...

  2. 基于glut的OpenGL框架(一)

    基于glut的OpenGL框架(一) --面向对象框架的搭建 我是一名OpenGL的初学者,在看完<OpenGL超级宝典>的前几章后,开始迫不及待地动手验证一下书上程序的代码了.我发现书上 ...

  3. android实现带纹理的运动轨迹,基于SceneForm实现子弹射击(绘制子弹运行轨迹)...

    基于 SceneForm 实现的子弹射击(绘制子弹运行轨迹) Sceneform 框架很强大,不了解 Sceneform 的时候,觉得要想做 3D 场景需要会 OpenGL,而 OpenGL 的学习曲 ...

  4. 基于 Spring SSM框架 开发的一套 进存销管理系统

    ** 基于 Spring SSM框架 开发的一套 进存销管理系统 ** 1.编写工具:Eclipse: 2.开发环境 java jdk版本1.8,Tomact 版本9.0: 3.运用框架 SSM(Sp ...

  5. 计算机图形学实验四 OpenGL的鼠标交互绘制

    一.实验目的 1.掌握OpenGL的鼠标按钮响应函数. 2.掌握OpenGL的鼠标移动响应函数. 3.进一步巩固OpenGL的基本图元绘制基础. 二.实验内容 1.鼠标画草图--实现鼠标点到哪,线就画 ...

  6. android平台下OpenGL ES 3.0绘制纯色背景

    OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...

  7. 基于AForge.Net框架的扑克牌识别

    基于AForge.Net框架的扑克牌识别 原文:基于AForge.Net框架的扑克牌识别 © 版权所有 野比 2012 原文地址:点击查看 作者:Nazmi Altun Nazmi Altun著,野比 ...

  8. android平台下OpenGL ES 3.0绘制立方体的几种方式

    OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...

  9. 用Delphi写的一个完整OpenGL框架

    用Delphi写的一个完整OpenGL框架 program OpenGLFramework; { OpenGL DelphiXE 出处:根据NeHe代码翻译而来(http://nehe.gamedev ...

最新文章

  1. graphql是什么_为什么GraphQL是避免技术债务的关键
  2. 如果输送知识不再重要,那么教育问题出在哪里?
  3. Android Studio不安装opencv manager配置
  4. 用Advanced Installer制作DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版详解
  5. Hibernate中Entity实体类的写法
  6. 微信公众号支付调用chooseWXPay提示“errmsg choosewxpay fail”
  7. HappyLeetcode64:Sqrt(x)
  8. poj 1325 Machine Schedule 解题报告
  9. TEncCu::xCheckRDCostMerge2Nx2N
  10. 群辉linux系统搭建网站,群晖折腾 篇一:群晖Web Station 功能搭建属于自己的照片分享网站...
  11. STM32 之 供电系统及内部参照电压(VREFINT)使用及改善ADC参考电压和ADC校准
  12. 线性代数学习笔记(二十一)——向量间的线性关系(一)
  13. Web常用的服务器软件整理(Win+Linux)
  14. Numpy与矩阵的相似对角化(Python与高等代数03)
  15. window系统下,使用sqlcipher工具加、解密sqllite数据库
  16. GNSS定位nmea数据解析
  17. PDF转PPT?只需这两种方法,轻松完成转换
  18. PHP数组与JSON互相转换
  19. 内网服务器设置NAT123端口映射,方便外网连接;如何测试端口连通情况。
  20. 手机端测试touch的一段代码

热门文章

  1. win10系统PrintScreen键截屏不能使用
  2. 基于WEB的学历信息征信系统设计与实现
  3. JAVA盖楼——IO
  4. 提升测试效率的神器 - xmind2testcase,高效测试用例导出工具~
  5. 蓝牙耳机什么牌子的音质好?音质最好的蓝牙无线耳机排名
  6. vue仿饿了么项目--vue实现1像素边框问题
  7. 圆角边框(border-radius属性、border-radius使用规则)
  8. 算法笔记练习 4.4 贪心 问题 F: 迷瘴
  9. python编写--爱词霸在线翻译软件
  10. 中望3D2022界面简介