精华内容
下载资源
问答
  • 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;

    1

    ③ 将glut.lib拷贝进VS安装目录下lib\x86文件夹内,这里笔者的路径是
    D:\Tools\Visual Studio 2019\VS IDE\VC\Tools\MSVC\14.28.29333\lib\x86;

    2

    ④ 将两个.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)进行注册,将几何形状画进画布(重绘消息),运行程序检验结果。

    五、实验结果

    实验输出图(文字部分是解释):

    3

    六、实验结论

    在没有显式地进行设置的情况下,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.北极星 4.绘制Bezier曲线 B样条曲线 5. 二维裁剪
  • 同时要求:(1)实现可利用鼠标选择直线的起始点坐标和终点坐标 (2)实现可动态选择线的颜色和线宽。利用1/8圆中点算法和Bresenham算法生成圆,多边形扫描线算法实现对多边形内部的填充。 注意:可能由于配置原因...
  • 编写点着色命令,显示各自姓中偏旁
  • 整理的报告,不是很好,功能都能实现
  • 1.OpenGL初识 2.直线生成算法 3.图形几何变换 4.线段裁剪算法 5.曲线生成算法 6.真实感图形算法 包含升升二部分
  • 1、运行附件中参考例子,理解Visual C++和OpenGL的使用。...5、构造任意个封闭并且不自交的多边形,假定该多边形内部是四连通的。要求: 用多边形扫描线算法实现对多边形内部的填充,要求内部颜色和边界颜色不一致。
  • 实验一 题目:OpenGL基础图形函数使用及基本图素的生成算法实现 设计一个二维卡通任务交互设计系统,实现直线,多边形绘制算法(橡皮筋效果),实现基于鼠标交互的卡通人物设计与绘制。使用颜色填充与反走样技术对...
  • 计算机图形学实验1

    2012-04-21 11:06:43
    计算机图形学实验,包含有填充算法(种子填充算法,扫描算法),很适合大家。
  • 1.定义二维坐标系原点位于屏幕中心,x轴水平向右为正,y轴铅直向上为正。 以二维坐标系原点为圆心绘制半径为r的圆,将圆的n等分点使用直线彼此连接形成金刚石图案。 2.程序运行界面提供“文件”、“绘图”和“帮助”...
  • 计算机图形学实验1-绘制任意斜率直线
  • 实验一图形的几何变换 3 实验二:图形的区域填充 6 实验三:曲线、曲面的生成 8
  • 根据OpenGL提供的直线,多边形绘制算法(橡皮筋效果),实现基于鼠标交互的卡通人物设计与绘制。使用颜色填充与反走样技术对卡通人物外貌以及衣着进行绘制。...按“↑”按键能够实现卡通人物绕坐标原点(或指定点)进行...
  • 1 画伯恩斯坦基函数的图像。 2用Bézier曲线的定义,画出由任意点(平面和空间)作为控制顶点的Bézier曲线。并制作男式衬衣样板。
  • 实验一的要求是:用OpenGL在一个窗口内画出三个不同的图像,并实现对这些图像的平移,旋转和缩放
  • (1)参加对象: 本实验针对所有选课同学,3-5人组成个小组,共同实现;非15级同学在组队方面有困难的话可与老师沟通. (2)实验结果提交: 每人都要求提交份. 内容包括 a.源程序; 可执行代码; 三维场景数据; 同组的...
  • 2020--SDUWH--计算机图形学实验 共20个实验 实验1 直线的绘制 实验2 直线的DDA生成算法 实验3 直线中点生成算法 实验4 直线Bresenham生成算法 实验5 中点画圆算法 实验6 中点画椭圆算法 实验7 多边形有序边表算法 ...
  • 1 已知控制顶点,做出张量积型的贝塞尔曲面。 2 用3×3的张量积型的贝塞尔曲面拟合一实物的旋转曲面。
  • 计算机图形学OpenGL版,主编:徐文鹏。课程实验指导1-8源码及运行结果。 实验一:OpenGL初识 实验二:直线生成算法实现 实验三:OpenGL几何变化 实验四:编码裁剪算法 实验五:OpenGL模型视图变换 实验六:...
  • 弹跳的球体:个着色的三维球体,沿着条给定的轨道(正弦衰弱曲线)不断弹跳并同时翻滚,要求按ESC停止转动翻滚按↑加快弹跳速度,按↓减慢弹跳速度。
  • 实验四 真实感图形的生成 实验内容 创建个简单场景 场景中有个复杂的三维几何体 通过系列处理使得场景和几何体具有真实感 可以通过变换视点观察场景 程序结构 创建Win32 Console Application使用OpenGL的...
  • 本资源包含了画任意斜率直线算法、画圆和椭圆算法、画圆弧算法以及带宽度的直线圆和椭圆,还带了排版规整的实验报告,源代码基于c,下载即可运行
  • 计算机专业
  • 实验一 二维镂空正三角形绘制 熟悉 VC++&OpenGL 的开发环境,设计镂空正三角形图形绘制软件。 (1)理解基本图形元素光栅化的基本原理; (2)掌握并实现基本图形元素的光栅化算法。 实验二 绘制正四面体 实验目的 ...
  • 1.在世界坐标系中定义个立方体(由6个面组成),并给定观察点在世界坐标系中的位置(a,b,c)以及观察坐标系的方位角θ,俯仰角φ和姿态角α,另外再给定投影面离观察点的距离D,在屏幕上画出立方体的透视投影图形。...
  • 实验一为OpenGL 基本图元的绘制及其简单几何变换:太阳、地球、月亮的相对位置示意图、制作一个时钟,表盘上具有时针、分针、秒针,其自主转动符合现实 时间,要求鼠标右键开始和暂停时间,左键调整时间。 实验二为...
  • 附可运行程序和课程报告,理解 DDA 直线生成算法、Bresenham 画线算法、中点画线算法 中点画圆算法、多边形填充算法(有序边表)、种子填充算法。
  • 1 用定义画出由任意控制顶点和节点构成的B样条曲线; 2 会排合适的控制顶点与节点画出特定的曲线,如圆。
  • 1)实现绘制个顶点和边数由用户自行控制的多边形。 (2)对上面绘制的多边形,实现下列的几何变化:首先沿着y轴平移100个单位,再使多边形沿着它自己的中心的x轴、y轴方向分别缩小50%;最后再绕中心旋转90度。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,825
精华内容 18,730
关键字:

计算机图形学实验一