-
2021-08-07 22:49:37
计算机图形学 实验1 《实验环境配置和基本图元绘制》
一、实验目的
配置基本实验环境、安装软件包、建立工程和绘制基本图元,要求学会点、线、三角形、四边形的绘制方法,学会消息传递和响应机制,用一个实例完成上述要求。
二、实验内容
1、配置OpenGL绘图环境;
2、绘制点、线、三角形、四边形等基本图元。三、实验方法
以Visual Studio 2019为开发环境,合理配置第三方glut相关文件(部署glut头文件、glut动态链接库、glut.lib类型库),并且使用OpenGL的基本绘制模式(包括GL_LINES、GL_POINTS、GL_TRIANGLES、GL_QUADS等)进行基本图形的绘制。
四、实验步骤
1、配置OpenGL绘图环境
① 选择Visual Studio 2019为开发环境,获取glut相关文件(这里用的是老师给的,也可以在官网下载glut压缩包),包括glut.h、glut.dll、glut32.dll、glut32.lib四个文件;
② 将glut.h拷贝进VS安装目录下的include\GL文件夹内,这里笔者的路径是
D:\Tools\Visual Studio 2019\VS IDE\VC\Tools\MSVC\14.28.29333\include\GL;③ 将glut.lib拷贝进VS安装目录下lib\x86文件夹内,这里笔者的路径是
D:\Tools\Visual Studio 2019\VS IDE\VC\Tools\MSVC\14.28.29333\lib\x86;④ 将两个.dll文件(glut.dll、glut32.dll)拷贝进系统目录,基于自己的系统是64位的windows10,将这两个动态链接库文件同时拷贝进C:\Windows\System32目录和 C:\Windows\SysWOW64目录,到此所有配置基本完成;
⑤ 进行配置试验,在VS 2019内新建一个空项目,向项目内添加一个测试用的源文件并运行,这里注意到windows环境下有时包含Windows.h头文件是有必要的,不然可能运行失败。2、绘制点、线、三角形、四边形等基本图元。
① 将上述新建的工程中添加的文件设置从生成中排除以免多个main函数导致出错;
② 工程内新建一个空白源文件,包含必要的头文件如Windows.h、GL\glut.h等并写出main函数;
③ 搭好main函数和展示函数的框架,即在main函数中添加绘制必备的几个基本步骤,包括初始化函数glutInit()
、绘制模式选择函数glutInitDisplayMode()
、窗体大小设置函数glutInitWindowSize()
、创建窗口函数glutCreateWindow()
、注册函数glutDisplayFunc()
、消息循环函数glutMainLoop()
等,并且写出display函数(即等待被注册的函数);
④ 在display
函数中进行绘制,display
函数中可以进行多次绘制(主要是更改缓冲区内容),最后使用glFlush函数将缓冲区的内容刷新到屏幕上进行显示即可。其中每次绘制的基本步骤是先通过glBegin()
函数的参数确定绘制的基本图元类型,在glBegin()
、glEnd()
函数包含的代码段内,使用glVertex2d确定图形的基本要素(由于这里主要是点、线、三角形和四边形,所以只需确定其顶点或者起始终止位置点即可);
⑤ 最后将完成的display
函数通过注册函数glutDisplayFunc(display)
进行注册,将几何形状画进画布(重绘消息),运行程序检验结果。五、实验结果
实验输出图(文字部分是解释):
六、实验结论
在没有显式地进行设置的情况下,
glVertex2d(x, y)
函数的参考坐标位于窗口正中央;OpenGL glut默认的窗口显示范围只有[-1,1];图形绘制的颜色(前景色)、直线的绘制类型等具有延迟性,即更改之后除非下次再更改或者清除效果,否则值会一直保持下去。源码:
#include <Windows.h> #include <GL\glut.h> #include <stdlib.h> #include <math.h> void display(void) { glClearColor(0, 0, 0, 0);//设定清除窗口的颜色 glClear(GL_COLOR_BUFFER_BIT);//执行清除窗口的指令 glColor3f(1.0, 1.0, 1.0);//指定绘制图形的颜色(前景色) glLineWidth(3.0); glBegin(GL_LINES); glVertex2f(-0.5, 0.75); glVertex2f(0.5, 0.75);//绘制线,指定起点与终点 glEnd(); glEnable(GL_LINE_STIPPLE); glLineStipple(1, 0x00FF);//dashed glLineWidth(3.0); glBegin(GL_LINES); glVertex2f(-0.5, 0.65); glVertex2f(0.5, 0.65);//绘制线,指定起点与终点 glEnd(); glLineStipple(1, 0x0101);//dotted glLineWidth(3.0); glBegin(GL_LINES); glVertex2f(-0.5, 0.7); glVertex2f(0.5, 0.7);//绘制线,指定起点与终点 glEnd(); glBegin(GL_POINTS); glVertex2d(-0.5, -0.5); glVertex2d(-0.5, 0.5); glVertex2d(0.5, 0.5); glVertex2d(0.5, -0.5);//绘制四个点 glEnd(); glBegin(GL_TRIANGLES);//绘制三角形,指定三个点为顶点 glVertex2d(-0.5, 0.0); glVertex2d(0.0, 0.5); glVertex2d(0.0, 0.0); glEnd(); glBegin(GL_QUADS);//绘制四边形,指定四个点为顶点 glVertex2d(0.0, 0.0); glVertex2d(0.3, 0.0); glVertex2d(0.3, -0.3); glVertex2d(0.0, -0.3); glEnd(); glFlush();//将缓冲区的内容刷新到屏幕上进行显示 } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(500, 500);// 设定初始时窗口的大小 glutInitWindowPosition(100, 100);// 设定初始时窗口的位置 glutCreateWindow("exp1");// 创建窗口,命名为exp1 glutDisplayFunc(display);//画图函数,将几何形状画进画布(重绘消息),同时这也是注册函数 glutMainLoop();//进入消息循环 return 0; }
七、实验小结
第一方面的困难来自环境的选择与配置。因为自己之前从未用过Visual Studio的系列版本,写C++程序一般用Code::Blocks或者Dev C++,因此在实验的时候并未使用Visual Studio而是选择的Code::Blocks进行配置,并且上网查找了配置的相关资料,虽然步骤正确但是一直没有配置成功。折腾了一上午,最后自己发现网上的教程大多都是2019年以前的,找到一篇2020年的博客,博主提供的原因是2020.03版本的Code::Blocks在查找动态链接库的时候会选择性忽略GLUT.LIB文件和两个.DLL文件,所以一直无法成功运行,但是17年的版本没有这个问题。然而17年的版本不太好安装,最后干脆选择使用Visual Studio 2019并成功完成了配置。
第二方面是因为自己对OpenGL绘图的基本流程还不是很清楚。这就像我们刚开始学C++程序设计时需要学习如何写一个简单的Hello World程序一样,控制台程序有一个基本的流程(虽然后期可能不太一定按照这个流程来),OpenGL编程也是这样。在查阅了一些相关的简单绘制程序的博客之后也解决了这个问题。
更多相关内容 -
计算机图形学实验 1.一笔绘制金刚石 2.魔术三角形 3.北极星
2021-03-19 06:30:33计算机图形学实验 1.一笔绘制金刚石 2.魔术三角形 3.北极星 4.绘制Bezier曲线 B样条曲线 5. 二维裁剪 -
计算机图形学实验一.zip
2020-06-10 00:59:22同时要求:(1)实现可利用鼠标选择直线的起始点坐标和终点坐标 (2)实现可动态选择线的颜色和线宽。利用1/8圆中点算法和Bresenham算法生成圆,多边形扫描线算法实现对多边形内部的填充。 注意:可能由于配置原因... -
计算机图形学实验1.docx
2021-01-02 12:47:54编写点着色命令,显示各自姓中偏旁 -
计算机图形学实验金刚石,魔术三角形,递归圆,北极星,曲线拟合,金刚石裁剪.zip
2020-05-23 18:05:48整理的报告,不是很好,功能都能实现 -
计算机图形学实验代码(全)
2018-11-09 10:58:151.OpenGL初识 2.直线生成算法 3.图形几何变换 4.线段裁剪算法 5.曲线生成算法 6.真实感图形算法 包含升一升二部分 -
计算机图形学实验一(DDA算法、中点算法、Bresenham算法、中点画圆算法)
2020-10-04 15:12:191、运行附件中参考例子,理解Visual C++和OpenGL的使用。...5、构造任意一个封闭并且不自交的多边形,假定该多边形内部是四连通的。要求: 用多边形扫描线算法实现对多边形内部的填充,要求内部颜色和边界颜色不一致。 -
山东大学计算机图形学实验一
2020-06-08 23:18:48实验一 题目:OpenGL基础图形函数使用及基本图素的生成算法实现 设计一个二维卡通任务交互设计系统,实现直线,多边形绘制算法(橡皮筋效果),实现基于鼠标交互的卡通人物设计与绘制。使用颜色填充与反走样技术对... -
计算机图形学实验1
2012-04-21 11:06:43计算机图形学实验,包含有填充算法(种子填充算法,扫描算法),很适合大家。 -
SDUST计算机图形学实验绘制金刚石(原创python实现)
2021-06-03 08:32:551.定义二维坐标系原点位于屏幕中心,x轴水平向右为正,y轴铅直向上为正。 以二维坐标系原点为圆心绘制半径为r的圆,将圆的n等分点使用直线彼此连接形成金刚石图案。 2.程序运行界面提供“文件”、“绘图”和“帮助”... -
计算机图形学实验1-绘制任意斜率直线
2022-05-22 10:39:14计算机图形学实验1-绘制任意斜率直线 -
计算机图形学实验报告
2018-04-01 17:09:31实验一:图形的几何变换 3 实验二:图形的区域填充 6 实验三:曲线、曲面的生成 8 -
山东大学计算机图形学实验1
2017-04-27 15:51:20根据OpenGL提供的直线,多边形绘制算法(橡皮筋效果),实现基于鼠标交互的卡通人物设计与绘制。使用颜色填充与反走样技术对卡通人物外貌以及衣着进行绘制。...按“↑”按键能够实现卡通人物绕坐标原点(或指定点)进行... -
计算机图形学实验7.docx
2021-01-02 12:53:101 画伯恩斯坦基函数的图像。 2用Bézier曲线的定义,画出由任意点(平面和空间)作为控制顶点的Bézier曲线。并制作男式衬衣样板。 -
山东大学计算机图形学实验一(OpenGL实现)
2018-04-10 19:34:47实验一的要求是:用OpenGL在一个窗口内画出三个不同的图像,并实现对这些图像的平移,旋转和缩放 -
华南理工大学计算机图形学实验
2018-05-20 22:43:45(1)参加对象: 本实验针对所有选课同学,3-5人组成一个小组,共同实现;非15级同学在组队方面有困难的话可与老师沟通. (2)实验结果提交: 每人都要求提交一份. 内容包括 a.源程序; 可执行代码; 三维场景数据; 同组的... -
SDUWH计算机图形学实验--2020
2020-10-22 16:55:082020--SDUWH--计算机图形学实验 共20个实验 实验1 直线的绘制 实验2 直线的DDA生成算法 实验3 直线中点生成算法 实验4 直线Bresenham生成算法 实验5 中点画圆算法 实验6 中点画椭圆算法 实验7 多边形有序边表算法 ... -
计算机图形学实验10.docx
2021-01-02 12:55:291 已知控制顶点,做出张量积型的贝塞尔曲面。 2 用3×3的张量积型的贝塞尔曲面拟合一实物的旋转曲面。 -
计算机图形学OpenGL版基础实验1-8.zip
2019-12-29 20:50:46计算机图形学OpenGL版,主编:徐文鹏。课程实验指导1-8源码及运行结果。 实验一:OpenGL初识 实验二:直线生成算法实现 实验三:OpenGL几何变化 实验四:编码裁剪算法 实验五:OpenGL模型视图变换 实验六:... -
图形学大实验报告_计算机图形学_
2021-09-30 15:43:55弹跳的球体:一个着色的三维球体,沿着一条给定的轨道(正弦衰弱曲线)不断弹跳并同时翻滚,要求按ESC停止转动翻滚按↑加快弹跳速度,按↓减慢弹跳速度。 -
计算机图形学实验——真实感图形场景的生成.doc
2020-09-18 04:30:49实验四 真实感图形的生成 实验内容 创建一个简单场景 场景中有一个复杂的三维几何体 通过一系列处理使得场景和几何体具有真实感 可以通过变换视点观察场景 程序结构 创建Win32 Console Application使用OpenGL的... -
计算机图形学画图实验
2020-05-25 21:13:03本资源包含了画任意斜率直线算法、画圆和椭圆算法、画圆弧算法以及带宽度的直线圆和椭圆,还带了排版规整的实验报告,源代码基于c,下载即可运行 -
计算机图形学实验一.pdf
2021-10-10 20:12:25计算机专业 -
中北大学大数据学院计算机图形学实验报告(共4个)(2018届)(可运行).zip
2021-08-23 17:44:54实验一 二维镂空正三角形绘制 熟悉 VC++&OpenGL 的开发环境,设计镂空正三角形图形绘制软件。 (1)理解基本图形元素光栅化的基本原理; (2)掌握并实现基本图形元素的光栅化算法。 实验二 绘制正四面体 实验目的 ... -
计算机图形学透视投影变换实验报告
2021-04-19 20:50:321.在世界坐标系中定义一个立方体(由6个面组成),并给定观察点在世界坐标系中的位置(a,b,c)以及观察坐标系的方位角θ,俯仰角φ和姿态角α,另外再给定投影面离观察点的距离D,在屏幕上画出立方体的透视投影图形。... -
2018123456789计算机图形学实验报告 .pdf
2020-12-22 10:36:25实验一为OpenGL 基本图元的绘制及其简单几何变换:太阳、地球、月亮的相对位置示意图、制作一个时钟,表盘上具有时针、分针、秒针,其自主转动符合现实 时间,要求鼠标右键开始和暂停时间,左键调整时间。 实验二为... -
西南交通大学计算机图形学实验二,附源代码和报告
2020-05-23 04:30:59附可运行程序和课程报告,理解 DDA 直线生成算法、Bresenham 画线算法、中点画线算法 中点画圆算法、多边形填充算法(有序边表)、种子填充算法。 -
计算机图形学实验11.docx
2021-01-02 12:56:201 用定义画出由任意控制顶点和节点构成的B样条曲线; 2 会排合适的控制顶点与节点画出特定的曲线,如圆。 -
计算机图形学实验2.rar
2020-10-04 15:15:50(1)实现绘制一个顶点和边数由用户自行控制的多边形。 (2)对上面绘制的多边形,实现下列的几何变化:首先沿着y轴平移100个单位,再使多边形沿着它自己的中心的x轴、y轴方向分别缩小50%;最后再绕中心旋转90度。...