《计算机图形学》 课程实验指导(1)资料

合集下载

计算机图形学实验指导书(vc++版)

计算机图形学实验指导书(vc++版)

实验指导书刘文涛2013目录第一章图形学实验环境和要求 (4)1.1 VC++实验环境 (4)1.1.1 基本环境 (4)1.1.1 开发图形程序的一般流程 (7)1.1.3 基本绘图函数介绍 (11)1.2 OpenGL (22)1.2.1 OpenGL介绍 (22)1.2.2 OpenGL开发环境 (24)1.2.3 OpenGL函数 (24)1.2.4 回调函数 (25)1.2.4 一个典型OpenGL例程 (26)1.3 实验要求 (29)1.3.1 实验内容 (29)1.3.2 实验方法 (29)1.3.3 实验效果 (30)第二章直线生成算法 (30)2.1 实验原理 (30)2.1.1 DDA算法 (30)2.1.2 Bresenham算法 (30)2.2 实验内容 (30)2.3 参考示例程序 (30)第三章圆和椭圆生成算法 (32)3.1 实验原理 (32)3.2 实验内容 (32)3.3 参考示例程序1 (32)3.4 参考示例程序2 (33)第四章裁剪算法 (35)4.1 实验原理 (35)4.2 实验内容 (35)4.3 示例程序 (35)4.3.1 参考例子1 (35)4.3.2参考例子2 (38)第五章二维变换 (40)5.1 实验原理 (40)5.2 实验内容 (40)5.3 示例程序 (40)5.3.1参考例子1 (40)第六章三维变换 (44)6.1 实验原理: (44)6.2 实验内容 (45)6.3示例程序 (45)第七章填充算法 (47)7.1 实验原理: (47)7.2 实验内容 (47)7.3示例程序 (47)第八章曲线曲面 (50)8.1 实验原理 (50)8.2 实验内容 (50)8.3示例程序 (51)8.3.1 参考例子(1) (51)8.3.2 参考例子(2) (52)8.3.3 参考例子(3) (54)8.3.4 参考例子(4) (56)第九章真实感图形绘制 (59)9.1 实验原理 (59)9.2 实验内容 (59)9.3示例程序 (59)9.3.1参考例子(1) (59)9.3.2参考例子(2) (61)9.3.3参考例子(3) (63)第十章动画 (66)10.1 实验原理 (66)10.2 实验内容 (66)10.3示例程序 (66)10.3.1 参考例子 (66)参考文献: (72)第一章图形学实验基础1.1 VC++实验环境1.1.1 基本环境Microsoft Visual C++ 6.0 是微软推出的功能强大的可视化C/C++语言编译器,运行在Windows 9x/2000/NT等平台上,可以建立32位应用程序。

《计算机图形学》上机实验指导1

《计算机图形学》上机实验指导1

KMUSTTeaching Records昆明理工大学《上机实验指导书》课程名称:计算机图形学所在系(部):国资院测绘系学年学期: 2012 — 2013 学年第 2 学期授课专业班级:地信101/土管101/测绘101 班级人数: 27/24/56 讲授教师:李向新教材名称:计算机图形学课程总学时: 64 ;总学分:理论学时: 38 ;实验(或实践)学时: 上机学时: 32 ;辅导(或答疑)学时: 系主任签章:第1部分计算机图形学上机实验大纲1.1 目的与任务计算机图形学上机是计算机图形学课程的组成部分之一,是掌握计算机图形学课程内容的一个重要实践环节。

通过上机实验,一方面可以让学生巩固课堂所学的计算机图形学基础理论,另一方面能让学生掌握基本的OpenGL的编程方法及技能,掌握使用OpenGL绘制基本图形,进行2D及3D维图形变换,生成曲线曲面及构建具有真实感的3D场景。

1.2 基本要求1. 了解OpenGL在计算机图形学中的应用基础知识。

2. 掌握基本的OpenGL的编程方法及技能。

3. 学会使用OpenGL绘制基本图形。

4. 学会使用OpenGL进行2D及3D维图形变换、生成曲线曲面及构建具有真实感的3D场景。

1.3 内容及学时安排上机1:glut工具包的安装及使用 2学时上机2:OpenGL编程练习 2学时上机3:OpenGL中基本几何图形的绘制 2学时上机4:二维图形变换编程练习 2学时上机5:交互式绘图技术编程练习 2学时上机6:三维图形变换编程练习 2学时上机7:OpenGL三维物体表示编程练习 2学时上机8:真实感图形的生成与处理上机 2学时合计 16学时1.4 教学参考书(1) 成思源等编著:计算机图形学,冶金工业出版社,2003.(2) (美)安杰尔(Edward Angel)著;李桂琼,张文祥译: OpenGL程序设计指南(第二版),北京:清华大学出版社,2005.(3) Edward Angel: Interactive Computer Graphics—A Top-Down Approach withOpenGL, Third Edition, Pearson Education, Inc., 2003.(4) F.S. Hill, JR:Computer Graphics Using OpenGL Second Edition, PearsonEducation, Inc., 2003.(5) James D. Foley et al.: Computer Graphics—Principles and Practice, SecondEdition in C, Pearson Education, Inc., 2002.(6) 朱家义:Visual C++程序设计,机械工业出版社,2003。

计算机图形学实验一

计算机图形学实验一

计算机图形学实验一标准化工作室编码[XX968T-XX89628-XJ668-XT689N]实验一二维基本图元的生成与填充实验目的1.了解并掌握二维基本图元的生成算法与填充算法。

2.实现直线生成的DDA算法、中点算法和Bresenham算法。

3.实现圆和椭圆生成的DDA和中点算法, 对几种算法的优缺点有感性认识。

二. 实验内容和要求1.选择自己熟悉的任何编程语言, 建议使用VC++。

2.创建良好的用户界面,包括菜单,参数输入区域和图形显示区域。

3.实现生成直线的DDA算法、中点算法和Bresenham算法。

4.实现圆弧生成的中点算法。

5.实现多边形生成的常用算法, 如扫描线算法,边缘填充算法。

6.实现一般连通区域的基于扫描线的种子填充算法。

7.将生成算法以菜单或按钮形式集成到用户界面上。

8.直线与圆的坐标参数可以用鼠标或键盘输入。

6. 可以实现任何情形的直线和圆的生成。

实验报告1.用户界面的设计思想和框图。

2.各种实现算法的算法思想。

3.算法验证例子。

4.上交源程序。

直线生成程序设计的步骤如下:为编程实现上述算法,本程序利用最基本的绘制元素(如点、直线等),绘制图形。

如图1-1所示,为程序运行主界面,通过选择菜单及下拉菜单的各功能项分别完成各种对应算法的图形绘制。

图1-1 基本图形生成的程序运行界面2.创建工程名称为“基本图形的生成”单文档应用程序框架(1)启动VC,选择“文件”|“新建”菜单命令,并在弹出的新建对话框中单击“工程”标签。

(2)选择MFC AppWizard(exe),在“工程名称”编辑框中输入“基本图形的生成”作为工程名称,单击“确定”按钮,出现Step 1对话框。

(3)选择“单个文档”选项,单击“下一个”按钮,出现Step 2对话框。

(4)接受默认选项,单击“下一个”按钮,在出现的Step 3~Step 5对话框中,接受默认选项,单击“下一个”按钮。

(5)在Step 6对话框中单击“完成”按钮,即完成“基本图形的生成”应用程序的所有选项,随后出现工程信息对话框(记录以上步骤各选项选择情况),如图1-2所示,单击“确定”按钮,完成应用程序框架的创建。

《计算机图形学》课程实验指导(1)全解

《计算机图形学》课程实验指导(1)全解

《计算机图形学》课程实验指导一.实验总体方案1.教学目标与基本要求(1)掌握教材所介绍的图形算法的原理;(2)掌握通过具体的平台实现图形算法的方法,培养相应能力;(3)通过实验培养具有开发一个基本图形软件包的能力。

2. 实验平台与考核实验主要结合OpenGL设计程序实现各种课堂教学中讲过的图形算法为主。

程序设计语言主要以C/C++语言为主,开发平台为Visual C++。

每次实验前完成实验报告的实验目的、实验内容、实验原理、实验代码四部分并接受抽查,实验完成后完成实验结果、实验体会两部分,本次实验课结束前提交。

3. 实验步骤(1) 预习教材与实验指导相关的算法理论及原理;(2) 仿照教材与实验指导提供的算法,利用VC+OpenGL进行实现;(3) 调试、编译、运行程序,运行通过后,可考虑对程序进行修改或改进。

二. 实验具体方案实验预备知识OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性。

1)与C语言紧密结合:OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的。

如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL 作图甚至比TC更加简单;2)强大的可移植性:微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统。

而OpenGL 不仅用于 Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机、各种专业计算机(如:医疗用显示设备)上都有应用。

并且,OpenGL 的基本命令都做到了硬件无关,甚至是平台无关;3) 高性能的图形渲染:OpenGL是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL提供强力支持,激烈的竞争中使得OpenGL性能一直领先。

总之,OpenGL是一个非常优秀的图形软件接口。

OpenGL官方网站(英文)下面将对Windows下的OpenGL编程进行简单介绍。

《计算机图形学》实验指导书

《计算机图形学》实验指导书

计算机图形学实验指导书袁科计算机技术实验中心目录实验一实现DDA、中点画线算法和Bresenham画线算法 (24)实验二实现Bezier曲线 (25)实验三实现B样条曲线 (26)实验四实现多边形填充的边界标志算法 (27)实验五实现裁剪多边形的Cohen-Sutherland算法 (28)实验六二维图形的基本几何变换 (30)实验七画图软件的编制 (31)实验一实现DDA、中点画线算法和Bresenham画线算法【实验目的】1、掌握直线的多种生成算法;2、掌握二维图形显示原理。

【实验环境】VC++6.0/ BC【实验性质及学时】验证性实验,2学时,必做实验【实验内容】利用任意的一个实验环境,编制源程序,分别实现直线的三种生成算法,即数字微分法(DDA)、中点画线法以及Bresenham画线算法。

【实验原理】1、数字微分法(Digital Differential Analyzer,DDA)算法思想:基于直线的微分方程来生成直线。

ε=1/max(|△x|,|△y|)max(|△x|,|△y|)=|△x|,即|k|≤1 的情况:max(|△x|,|△y|)=|△y|,此时|k|≥1:2、中点画线法算法思想:每次在最大位移方向上走一步,另一方向是否走步取决于误差项的判断。

3、Bresenham画线算法算法思想:其基本思想同中点算法一样,即每次在最大位移方向上走一步,而另一个方向是否走步取决于误差项的判断。

【实验要求】1.上交源程序;2.上交实验报告,实验报告内容如下:(1) 实验名称(2) 实验目的(3) 算法实现的设计方法及程序流程图(4) 程序结果分析【分析与思考】(1) 上述所阐述的三个算法,其基本算法只能适用于直线的斜率(|K|<=1) 的情形,如何将上述算法进行推广,使其能够处理任意斜率的直线?(2) 计算机显示屏幕的坐标圆心在哪里,与我们平时的习惯有什么差异,如何协调二者?实验二 实现Bezier 曲线【实验目的】1、掌握Bezier 曲线的定义;2、能编程实现N 次Bezier 曲线的绘制与显示。

计算机图形学实验指导书

计算机图形学实验指导书

计算机图形学实验指导书【】第一章计算机图形学的软件开发环境计算机图形学中的程序都是用C语言编写的,Turbo C和Visual C++常见的两种C语言开发环境,Turbo C是在Dos环境下开发,而Visual C++是在Windows环境下开发。

1.1、在Turbo C环境下开发应用程序一些高级语言都扩充了图形功能,这使得用户可以不需配备专门的图形软件,就能在计算机上进行图形工作。

Turbo C 2.0包含有460多个库函数,其中有 70 多个图形函数,这些函数包括了绘图、处理图象及图素、屏幕及视图区控制、颜色及线型设置、状态查询和出错处理等,这使得 TurboC具有很强的图形功能。

1.图形显示器的工作方式IBM PC 机的显示器可以在两种基本视频方式下工作:一种是文本方式;另一种是图形方式。

( 1 )文本方式在文本方式下,屏幕上可以显示的最小单位是字符,字符在屏幕上以行、列排列,即我们通常见到的情况。

文本方式不同,屏幕上所显示字符的行数和列数也不一样,颜色也会有所区别。

Turbo C 支持 6 种不同的文本显示方式。

( 2 )图形方式在图形方式下,屏幕上可以控制的最小单元称作像素 ( pixel ) ,它是组成图形的基本元素,一般叫作“点”。

通常把屏幕上所包含像素的个数叫做分辨率。

分辨率越高,显示的图形越细致、质量越好,这是显而易见的。

在图形方式下,屏幕上每个像素的显示位置用点坐标系来描述。

在该坐标系中,屏幕左上角为坐标系的原点,坐标值为 ( 0 , 0 ) ; 水平方向为X轴,自左向右;垂直方向为Y轴,自上向下。

见下图。

点坐标系中坐标值的范围决定于所用显示器的分辨率。

分辨率不同,水平方向上和垂直方向上的点数也不同,即其 maxx 、maxy 的数值不同。

就我们常用的 VGA 显示器来说,它通常所用的分辨率为6405480 ,即它的 maxx 值为 639 , maxy 的值为479。

2. 图形函数及其用法Turbo C 的图形函数均在一个头文件“ graphics.h” 中定义。

课件计算机图形学图形学实验指导书.docx

课件计算机图形学图形学实验指导书.docx

《计算机图形学》实验指导书首都师范大学信息工程学院2005年9月7日赵艳红通过学习《计算机图形学》课程可以了解和掌握计算机绘图的基本原理和算法,学会运用计算机编程语言和其它绘图工具绘制图形。

《计算机图形学》课程包括课堂教学和上机实验,这本实验指导书是为了配合上机实验而编写的。

第I章介绍了利用C语言绘图的基础知识,主要是考虑C语言课程屮讲授的重点是标准C (ANSIC),较少涉及图形环境和图形函数,因此着重讲解了C语言图形初始化的方法和常用C语言图形函数,并对Turbo C 3.0集成环境作了介绍。

第2章讲述了实验的上机要求和操作步骤,实验中可按步骤执行。

部分实验要求的后面附有C语言的源程序,可作为编程的参考。

上机实验时的注意事项和机房管理条例列于附录屮,请参照执行。

目录第1章C语言绘图基础1」图形与显示器基础1.2C语言图形初始化1.3Turbo C 3.0的集成环境第2章实验指导2」实验一直线的扫描转换2.2实验二旋转的矩形2.3实验三直线段的裁剪(或三维图形显示)2.4实验四曲线2.5实验五分形几何造型附录1关于工程文件的使用2Turbo C图形函数的分类3Turbo C图形函数(ABC顺序)4实验报告要求5上机实验屮编程技巧第1章C语言绘图基础1.1图形与显示器基础图形与计算机系统硬件有着密切的联系。

显示器的工作方式分为两种:一是正文方式,二是图形方式,要在屏幕上显示图形,就必须工作在图形方式下。

在图形方式中又分为多种模式,例如CGA,EGA,VGA等等。

不同的模式显示的分辨率不同。

支持显示模式需要三个条件:显示器,显示卡,和驱动程序。

下表列出Turbo C支持的图形模式。

1.2C语言图形初始化在计算机上绘制和显示图形,必须工作在图形方式下。

使用Turbo C绘制图形的基本步骤为:*设置图形方式*绘制图形*关闭图形方式图形方式初始化是通过函数initgraph来完成的,其功能是通过装入一个图形驱动程序来初始化图形系统,并将系统设置为图形方式。

计算机图形学试验指导书[1]

计算机图形学试验指导书[1]

《电脑图形学》实验指导书傅由甲卢宇编重庆理工大学电脑科学与工程学院2008年10月目录目录 (I)1 OPENGL与三维图形 (1)1.1O PEN GL介绍 (1)1.2O PEN GL函数的语法 (3)1.3O PEN GL是状态机 (4)1.4O PEN GL相关的函数库 (4)1.5O PEN GL的缓冲区 (4)2 MICROSOFT VISUAL C++ 6.0 MFC编程基础 (6)2.1MFC事件驱动简介 (6)2.2MFC事件驱动编程 (6)2.3在VC下实现O PEN GL程序的编译 (12)实验1 WINDOWS操作系统图形开发基础 (13)一、实验要求和目的 (13)二、相关知识提要 (13)三、实验内容及步骤 (15)四、实验习题 (18)实验2 基本光栅图形生成 (20)一、实验要求和目的 (20)二、相关知识提要 (20)三、实验内容及题目 (23)实验3 图形变换 (25)一、实验要求和目的 (25)二、相关知识提要 (25)三、实验内容及步骤 (27)四、实验习题 (28)实验四交互式绘图技术 (29)一、实验要求和目的 (29)二、实验内容及步骤 (29)三、实验习题 (34)实验五光照处理 (35)一、实验要求和目的 (35)二、相关知识提要 (35)三、实验内容及步骤 (38)四、实验习题 (41)实验六纹理映射 (42)一、实验要求和目的 (42)二、相关知识提要 (42)三、实验内容及步骤 (45)四、实验习题 (46)实验七曲面生成 (47)一、实验要求和目的 (47)二、相关知识提要 (47)三、实验内容及步骤 (50)四、实验习题 (55)实验八综合实验〔供优秀学生选做〕 (56)一、实验要求和目的 (56)二、实验内容 (56)三、实验步骤 (56)1 OpenGL与三维图形1.1 OpenGL介绍我们生活在一个充满三维物体的三维世界中,为了使电脑能精确地再现这些物体,必须能在三维空间描绘这些物体。

《计算机图形学》课内实验报告(实验一)

《计算机图形学》课内实验报告(实验一)
PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
PFNGLUNIFORM1FARBPROC glUniform1fARB;
PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
#ifndef __APPLE__
PFNGLSECONDARYCOLOR3FPROC glSecondaryColor3f;
{
GLbyte infoLog[MAX_INFO_LOG_SIZE];
glGetInfoLogARB(progObj, MAX_INFO_LOG_SIZE, NULL, infoLog);
fprintf(stderr, "Error in program linkage!\n");
fprintf(stderr, "Info log: %s\n", infoLog);
// Demonstrates high-level shaders
// Program by Benjamin Lipchak
#include "../../Common/OpenGLSB.h" // System and OpenGL Stuff
#include "../../Common/GLTools.h" // System and OpenGL Stuff
// Initially set the blink parameter to 1 (no flicker)
if (flickerLocation != -1)
glUniform1fARB(flickerLocation,1.0f);
// Program object has changed, so we should revalidate

《计算机图形学》实验指导书(正式版)

《计算机图形学》实验指导书(正式版)

《计算机图形学》实验指导谢晓玲华东理工大学信息学院计算机系2010年8月目录实验1 OpenGL应用的创建 (2)实验2 橡皮筋技术的实现 (17)实验3 基本变换 (24)实验4 拾取 (41)实验5 三维观察的实现 (54)实验1 OpenGL应用的创建一、实验目的1、了解C++.NET开发基于窗口技术的应用程序的步骤;2、了解OpenGL绘图的步骤;3、显示一个三角形图形。

二、使用的工具软件及环境C++.NET、OpenGL三、实验内容1、构造一个单文档的Windows应用程序2、定义一个填充图案;3、通过菜单,交互控制填充开关;4、显示一个填充的三角形图形。

四、实验指导1、基本要素(1)C++.NET程序设计框架C++.NET提供了一套应用程序框架,应用程序框架是指用于生成一般的应用程序所必须的各种面向对象的软件组建的集合。

C++程序设计的特点之一就是大量使用类库来进行功能扩展。

类库是一个可以在应用程序中使用的相互关联的C++类的集合。

一些类库是随编译器一起提供的,一些是由其他软件公司销售的,还有一些是由用户自己开发的。

应用程序框架是一种类库的超集,它用来定义程序的结构,将其他的类库,例如文档类、视图类及用户自定义类等,嵌入到应用程序框架中,以完成用户预期的功能。

通过定制,C++.NET 可以自动生成一套程序代码,以单文档多视风格的应用程序为例,自动生成的源代码主要包含应用程序类、主框架类、文档类、视口类。

以MyDemo为工程名,C++.NET自动生成的类如下:A.class CMyDemoApp: public CWinAppCMyDemoApp的对象就代表了一个应用程序。

该程序定义了一个单独的全局CMyApp对象theApp:CMyDemoApp theApp;其基类决定了theApp的行为,包括程序的启动、初始化和运行等。

B.class CMainFrame : public CFrameWnd它代表了应用程序的主框架窗口,它负责创建和显示具体的窗口结构,并负责消息的分发。

计算机图形学实验报告(一).doc

计算机图形学实验报告(一).doc

实验一OpenGL开发环境及扫描转换算法1、实验目的与要求1.通过实验掌握OpenGL中编程环境的设置,了解相关函数用途及设置步骤;2.通过实验掌握基本图形元素的生成,给出相关代码和运行结果;3.用WINDOWS GDI函数编写生成直线或区域填充的程序(选DDA或Bresenham直线算法,活性边表算法填充多边形),演示算法过程。

4.画矩形,调用一个函数画一个矩形。

画椭圆,调用一个函数画一个椭圆。

画Bezier 曲线。

2、实验方案请描述为达到实验的需要完成哪些方面的实验,列举出实验的基本要点和重点。

在工程WinAPIEX加入void createLine(HDC tmpDC)和void Polyline (tmpDC)在void createLine(HDC tmpDC)用DDA直线算法或Bresenham直线算法生成直线在void Polyline (tmpDC)添加活泩边表填充算法,生成填充四边形和八边形加入Rectangle(tmpDC,x0,y0,x1,y1);加入Ellipse (tmpDC, x0,y0,a,b) ;加入PolyBezier(tmpDC,arr_vertex,4) ;3、实验结果和数据处理1)生成直线的DDA直线算法在createLine(tmpDC)中加入以下代码int x0,y0,x1,y1,color; //自定义直线的起点(x0,y0)和终点(x1,y1),及颜色colorfloat dx,dy,x,y;int length,i;x0=50;y0=160;x1=900;y1=200;//此处修改了color=1000; color=1;if(abs(x1-x0)>=abs(y1-y0))length=abs(x1-x0);elselength=abs(y1-y0);dx=(x1-x0)/(float)length;dy=(y1-y0)/(float)length;i=1;x=(float)x0;y=(float)y0;while(i<=length){SetPixel(tmpDC,int(x+0.5),int(y+0.5),color);x+=dx;y+=dy;i++;}2)区域填充的程序在void Polyline (tmpDC) 添加活性边表填充void Polyline (HDC tmpDC) //多边形边数.{const int POINTNUM=4;//或者是八边形8/******定义结构体用于活性边表AET和新边表NET***************************** ******/typedef struct XET{float x;float dx,ymax;XET* next;}AET,NET;/******定义点结构体point**************************** **************************/struct point{float x;float y;}polypoint[POINTNUM]={100,10 0,400,100,400,400,100,400};//正方形//polypoint[POINTNUM]={600,10 0,700,100,800,200,800,300,700,400,600, 400,500,300,500,200};//八边形顶点/******计算最高点的y坐标(扫描到此结束)****************************** **********/int MaxY=0;int i;for(i=0;i<POINTNUM;i++)if(polypoint[i].y>MaxY) MaxY=(int)polypoint[i].y;/*******初始化AET表********************************* **************************/AET *pAET=new AET;pAET->next=NULL;/******初始化NET表********************************* ***************************/NET *pNET[1024];for(i=0;i<=MaxY;i++){pNET[i]=new NET;pNET[i]->next=NULL;}/******扫描并建立NET表********************************* ************************/for(i=0;i<=MaxY;i++){for(intj=0;j<POINTNUM;j++)if(polypoint[j].y==i){if(polypoint[(j-1+POINTNUM)%POINT NUM].y>polypoint[j].y){NET*p=new NET;p->x=polypoint[j].x;p->ymax=polypoint[(j-1+POINTNUM) %POINTNUM].y;p->dx=(polypoint[(j-1+POINTNUM)%P OINTNUM].x-polypoint[j].x)/(polypoint [(j-1+POINTNUM)%POINTNUM].y-po lypoint[j].y);p->next=pNET[i]->next;pNET[i]->next=p;}if(polypoint[(j+1+POINTNUM)%POIN TNUM].y>polypoint[j].y){NET*p=new NET;p->x=polypoint[j].x;p->ymax=polypoint[(j+1+POINTNUM) %POINTNUM].y;p->dx=(polypoint[(j+1+POINTNUM)% POINTNUM].x-polypoint[j].x)/(polypoint[(j+1+POINTNUM)%POINTNUM].y-polypoint[j].y);p->next=pNET[i]->next;pNET[i]->next=p;}}}/******建立并更新活性边表AET***************************** ************************/for(i=0;i<=MaxY;i++){//计算新的交点x,更新AET***************************** ***************************/NET *p=pAET->next;while(p){p->x=p->x + p->dx;p=p->next;}//更新后新AET先排序********************************* ****************************///断表排序,不再开辟空间AET *tq=pAET;p=pAET->next;tq->next=NULL;while(p){while(tq->next && p->x >= tq->next->x)tq=tq->next;NET *s=p->next;p->next=tq->next;tq->next=p;p=s;tq=pAET;}//(改进算法)先从AET表中删除ymax==i的结点********************************* *******/AET *q=pAET;p=q->next;while(p){if(p->ymax==i){q->next=p->next;delete p;p=q->next;}else{q=q->next;p=q->next;}}//将NET中的新点加入AET,并用插入法按X值递增排序********************************* */p=pNET[i]->next;q=pAET;while(p){while(q->next && p->x >= q->next->x)q=q->next;NET *s=p->next;p->next=q->next;q->next=p;p=s;q=pAET;}/******配对填充颜色********************************* ******************************/p=pAET->next;while(p && p->next){for(floatj=p->x;j<=p->next->x;j++){SetPixel(tmpDC,static_cast<int>(j),i,RG B(255,200,0));//此处我改变了颜色,八边形的为黄色//SetPixel(tmpDC,static_cast<int>(j),i,RG B(255,0,0));//还有四边形的红色}p=p->next->next;//考虑端点情况}} }//画矩形Rectangle(tmpDC,20,20,80,80); //左上顶点,右下顶点//画椭圆Ellipse (tmpDC, 20,20,160,360) ;//画Bezier 曲线,利用已有的顶点数据PolyBezier(tmpDC,arr_vertex,4) ;实验截图:1.DDA算法的直线2.四边形和八边形3.正方形4.椭行5.Bezier 曲线实习总结:通过本次实验,我掌握了opengl绘图的一些基本知识,会在vc里面加入opengl的基本库。

计算机图形学试验指导书[1]

计算机图形学试验指导书[1]
1
由于许多在计算机界具有领导地位的计算机公司纷纷采用 OpenGL 作为三维图形应用程序设计界面,OpenGL 应用程序具有广 泛的移植性。因此,OpenGL 已成为目前的三维图形开发标准,是从事 三维图形开发工作的技术人员所必须掌握的开发工具。
OpenGL 作为一个与硬件独立的图形接口,它不提供与硬件密切 相关的设备操作函数,同时,它也不提供描述类似于飞机、汽车、分子 形状等复杂形体的图形操作函数。用户必须从点、线、面等最基本的 图形单元开始构造自己的三维模型。
在 OpenGL 中进行主要的图形操作直至在计算机屏幕上渲染绘 制出三维图形景观的基本步骤为:
(1) 根据基本图形单元建立景物模型,并且对所建立的 模型进行数学描述(OpenGL 中把点、线、多边形、图像和位 图都作为基本图形单元);
(2) 把景物模型放在三维空间中的合适的位置,并且设 置视点(viewpoint)以观察所感兴趣的景观;
(3) 计算模型中所有物体的色彩,其中的色彩根据应用 要求来确定,同时确定光照条件、纹理粘贴方式等;
4
(4) 把景物模型的数学描述及其色彩信息转换至计算机 屏幕上的像素,这个过程也就是光栅化(rasterization)。 在这些步骤的执行过程中,OpenGL 可能执行其他的一些操作,例 如自动消隐处理等。另外,景物光栅化之后被送入帧缓冲器之前还可 以根据需要对像素数据进行操作。 OpenGL 能够对整个三维模型进行渲染着色,从而绘制出与客观 世界十分类似的三维景象。另外 OpenGL 还可以进行三维交互、动作 模拟等。具体的功能主要有以下这些内容。 (1)模型绘制 OpenGL 能够绘制点、线和多边形。应用这些基本的形体,可以构 造出几乎所有的三维模型。OpenGL 通常用模型的多边形的顶点来描 述三维模型。 (2)模型观察 在建立了三维景物模型后,就需要用 OpenGL 描述如何观察所建 立的三维模型。观察三维模型是通过一系列的坐标变换进行的。模型 的坐标变换使观察者能够在视点位置观察与视点相适应的三维模型 景观。在整个三维模型的观察过程中,投影变换的类型决定观察三维 模型的观察方式,不同的投影变换得到的三维模型的景象也是不同的。 最后的视窗变换则对模型的景象进行裁剪缩放,即决定整个三维模型 在屏幕上的图像。

计算机图形学课程实验指导书和作业

计算机图形学课程实验指导书和作业

《计算机图形学》实验指导书、作业学期:2011-2012(2)班级:测绘工程10-1班姓名:汪帅学号:20100202测绘工程学院目录实验一直线段生成算法实现 (1)实验二圆生成算法的实现 (5)实验三二维图形几何变换的实现 (8)实验四直线段裁剪算法的实现 (13)实验报告1 (19)实验报告2 (26)实验报告3 (30)实验报告4 (37)实验一 直线段生成算法实现一、实验目的熟练掌握DDA 直线生成算法、中点直线生成算法、Bresenham 直线生成算法的算法思想,了解各个算法中寻找直线段上的像素点的过程。

二、实验学时 2学时三、实验类型现代实验、验证性、自立式四、实验要求1.根据指导书所给的参考代码,每人至少实现两种直线段的生成算法。

2.要求能够实现任意起始点和终止点坐标的直线段的绘制。

3.能够实现不同线型(实线、虚线、点划线)、不同线宽(单像素宽度、多像素宽度)的直线段的绘制。

五、实验原理与步骤 原理:1.数值微分法(DDA )设一直线段的起点和终点坐标分别为(xs , ys)和(xe , ye)。

则直线段在X 和Y 方向的增量分别为: △x=xe- xs ,△y= ye- ys 设△t=max(|△x|,|△y|)取时间步长为1/△t,若当前像素点坐标为(xi, yi),则下一个像素点的坐标可由以下两式确定: xi+1=xi+dx=xi+Dx/Dt yi+1=yi+dy=yi+Dy/Dt 2.中点直线生成算法:假定直线斜率0<m<1,且已确定点亮象素点P (Xi ,Yi ),则下一个与直线最接近的像素只能是P1点或P2点。

设M 为中点,Q 为交点,现需确定下一个点亮的象素。

当M 在Q 的下方-> P2离直线更近更近->取P2 。

M 在Q 的上方-> P1离直线更近更近->取P1 M 与Q 重合, P1、P2任取一点。

假设直线方程为:ax+by+c=0 其中a=y0-y1, b=x1-x0, c=x0y1-x1y0 F(x,y)=0 点在直线上面 F(x,y)>0 点在直线上方 F(x,y)<0 点在直线下方欲判断M 点是在Q 点上方还是在Q 点下方,只需把M 代入F(x,y),并检查它的符号。

实验指导书-计算机图形学

实验指导书-计算机图形学

《计算机图形学》实验指导书《计算机图形学》实验指导书目录目录 (1)概述 (2)实验1 熟悉实验环境 (3)1.1 实验要求和目的 (3)1.2 实验课时 (3)实验2 直线的生成 (4)2.1 实验要求和目的 (4)2.2 实验课时 (4)2.3 实验环境 (4)2.4 实验平台简介: (4)2.5 思考题(选做) (5)实验3 多边形扫描转换算法 (7)3.1 实验要求和目的 (7)3.2 实验课时 (7)3.3 实验环境 (7)3.4 实验平台简介: (7)实验4 BSpline曲线绘制 (10)4.1 实验要求和目的 (10)4.2 实验课时 (10)4.3 实验环境 (10)4.4 实验平台介绍 (10)实验5 光照模型(Illumination Model) (13)5.1 实验要求和目的 (13)5.2 思考题 (13)5.3 实验课时 (13)5.4 实验环境 (13)5.5 实验平台介绍 (13)附录A:实验报告 (17)概述(1)实验概述运用某种程序设计语言设计并实现计算机图形学的直线、曲线、简单多面体(四面体)等基本图形元素的表示和绘制,以检验和巩固计算机图形学中的基本知识、加深对本课程原理、方法和技术的理解,锻炼和培养学生实际操作技能和解决实际问题的能力,使学生熟悉解决实际问题的过程。

(2)实验目的和要求实验目的是检验和巩固所学知识与方法,通过实现基本图形元的表示和绘制过程,理解并掌握计算机图形学的原理、方法和技术,并灵活运用它们解决实际问题。

要求理解各实验相关的原理和实现方法,通过这些实验的训练,加深对课程中原理、方法和技术的理解,验证和巩固计算机图形学中的基本知识,锻炼和培养学生熟悉图形编程环境,理解课程中基本问题的求解算法和性能改进方法,并对结果进行充分测试。

(3)主要原理与概念一般来说,计算机图形学的基本内容包括图形的表示(如三维形体的表示,曲线、曲面的表示等)、图形变换和观察、图形生成(基本图形生成,消隐、真实感绘制等)三个方面,涉及大量数据结构、算法。

《计算机图形学》实验指导书

《计算机图形学》实验指导书

《计算机图形学》实验指导书实验一:二维基本图元的生成1、实验目的:参照Windows的画笔或Office中的绘图模块设计学会自己编程实现二维基本图元的生成。

实现二维基本图元直线段生成的DDA算法,中点算法、Bresenham算法。

2、实验内容:用数值微分DDA算法、中点算法、Bresenham算法扫描转换直线段(20,10)--(30,18)3、实验要求:1)写出扫描转换的结果2)写出每一步递推过程的x,y坐标及判别式d的值3)图示计算结果4)考虑实现环境、编程语言和设计界面风格5)用菜单或按钮调用方式实现每个基本算法6)考虑界面的美观,扩展,人机交互等因素7)调试程序,验证算法的正确性8)提交实验报告4、参考:教材,开发平台的联机帮助。

演示参考:DDA算法:斜率k=(5-1)/(5-0)=0.8x y y+0.5 int(y+0.5)0 1 1.5 11 1.8 2.3 22 2.6 3.1 33 3.4 3.9 34 4.2 4.7 45 5.0 5.5 5中点算法:a=y0-y1=-4;b=x1-x0=5; d0=2a+b=-3; d1=2a=-8; d2=2(a + b) =2;x y d 说明0 1 -31 2 -1; d<0, d+d22 3 1; d<0, d+d23 3 -7; d>0, d+d14 4 -5; d<0, d+d25 5 -3; d<0, d+d2 结果图示:实验二:写一个画带线宽的程序。

1、实验目的:参照Windows的画笔或Office中的绘图模块设计学会自己编程实现二维基本图元的生成2、实验内容:实现对线宽的属性的控制3、实验步骤:1)考虑实现环境、编程语言和设计界面风格2)调用菜单或按钮调用方式实现每个基本算法3)考虑界面的美观,扩展,人机交互等因素4)键盘输入直线的两个端点坐标及线宽的倍数,调用算法实现5)调试程序,验证算法的正确性6)提交实验报告4、参考:教材,开发平台的联机帮助。

计算机图形学课程实验指导书

计算机图形学课程实验指导书

前言本课程的基本内容介绍,通过学习学生需要掌握的基本知识。

为了使学生更好地理解和深刻地把握这些知识,并在此基础上,训练和培养哪些方面的技能,设置的具体实验项目,其中哪几项实验为综合性、设计性实验。

各项实验主要了解、掌握的具体知识,训练及培养的技能。

本指导书的特点。

对不同专业选修情况说明。

实验:金刚石图案算法实验学时:2实验类型:(演示、验证√、综合、设计√、研究)实验要求:(必修、选修)一、实验目的通过本实验的学习,使学生掌握Visual C++ 6.0编程的基本步骤,熟悉MFC 绘图相关类和方法,进一步熟悉面向对象的程序设计方法,为进一步学习基本图元的绘制、图形几何变换等内容作好准备。

二、实验内容定义或输入半径和等分点个数,在一个以该半径为圆的圆周上求出每个等分点的坐标,然后所有等分点之间均用直线相连接,构成一个金刚石的图案。

一个可能的图案如下:三、实验原理、方法和手段1、可以设计成菜单方式,用对话框来设置半径和圆周上等分点的个数。

2、利用CDC类中的lineto函数来绘制直线。

四、实验组织运行要求学生自主训练为主的开放模式组织教学五、实验条件windows XP虚拟机和vc++6.0编程环境六、实验步骤由学生自行设计实验方案并加以实现的实验七、思考题考虑如何让屏幕得到刷新实验1:中点扫描转换实现实验学时:4实验类型:(演示、验证、综合、设计√、研究)实验要求:(必修√、选修)一、实验目的通过本实验的学习,使学生掌握Visual C++ 6.0编程的基本步骤,进一步熟悉面向对象的程序设计方法,掌握中点法绘制圆形的算法原理,理解与构造中点偏差判别式,并能通过CDC类的SetPixel方法来实现,为进一步学习基本图元的绘制、图形几何变换等内容作好准备。

二、实验内容1、输入直线的起点和终点坐标,在客户区中央绘制出该直线,如下图所示。

2、输入半径,则在客户区中央绘制出该半径的圆,如下图所示。

三、实验原理、方法和手段1、可以设计成菜单方式,用对话框来设置半径和圆周上等分点的个数。

计算机图形学实验指导书

计算机图形学实验指导书

超级链接
不论文字或图形,都可加上超级链接,一个完整网站,至少包括 以下两种链接。 1 、站内链接:若网站规划多个主题板块,必须在首页加入超级链接。
2 、站外链接:外部链接到internet。
页面的创建和保存
创建新空白页面 打开一个已存在的HTML文件 注意:不能直接将WORD文档(.doc)导入Dreamweaver中,必须先在word 中将文件保存为HTML文件格式,再在Dreamweaver中导入。 基于模板创建新页面 (1)文件—新建,切换到“模板”选项卡 (2)在对话框中选择一个模板,单击“创建” 当基于模板创建文档时,文档某些部分可能被锁定,不许修改,以 保证在站点中不同文档的一致性,文档可编辑区,输入所需要的内容。 保存文件 默认文件类型为.htm 或.html
动画效果较电影和电视的要求低,放映速度系统缺省只有 1/12秒。
2、 flash MX中动画文件的结构 flash结构也分多层:
flash MX文件(影片) 一个或多个场景 多个实例。(举例说明) 一帧或多帧 一个或多个图层 一个或
3、 舞台和工作区
创作影片中各个帧的内容的区域,可以在其中直接勾画插图或导入插图。
图层技术
图层与几何变形:延伸线 1.FLA 图层与图形组件: 4球体移动.FLA 图层实现文字动画 文字飞入特效 .fla
引导线技术
基本:5引导球体移动 .FLA 高级:
注意:在拖动中一定要使小球的中心位置在曲线上,才能使小球 按指定的轨迹运动,运动的轨迹并不显示出来。
遮蔽图层技术
基本:6遮蔽.FLA 高级:放大镜 .FLA
为了照顾网页的下载速度,一般很少使用背景图片,而是给网页加上背景颜色。
网页的文字色彩 网页的边距 网页语种 网页蓝图 图片的透明度 默认为 0 ,不透明度是 100 。

《计算机图形学》实验指导书

《计算机图形学》实验指导书
2、能够根据实验指导书的要求,完成相关的内容;
3、务必掌握绘图程序的开发流程,为今后复杂的图形程序开发做好准备。
四、实验内容
(一)生成绘图应用程序的框架
开发绘图应用程序的第一步是使用AppWizard(程序生成向导)来建立程序的基本框架。AppWizard为框架的建立提供了一系列对话框及多种选项,用户可以根据不同的选项生成自己所需要的应用程序框架。具体步骤如下:
五、思考
1、如何实现圆心为任意位置的圆的绘制;
2、两种画圆算法的比较。
六、实验总结
湖北汽车工业学院实验报告
班级
学号
姓名
课程名称
完成日期
实验四 实现Bezier曲线的生成算法
一、实验目的
1、熟悉CDC图形程序库;
2、掌握Bezier曲线的生成算法;
3、掌握利用Bezier曲线生成复杂形状的曲线;
五、思考
1、MFC开发绘图程序时,工作窗口坐标系是怎么样的,坐标原点在哪儿?
2、实现任意斜率直线生成问题时,能不能使用模块化的思想,即将各个画线算法程序进一步分解,通过不同的函数来完成不同斜率的生成?
3、三种不同的直线生成算法的分析和比较。
六、实验总结
湖北汽车工业学院实验报告
班级
学号
姓名
课程名称
完成日期
pDC->SetPixel(-y+x0,x+y0,RGB(255,0,0));
pDC->SetPixel(-x+x0,y+y0,RGB(255,0,0));
}
}
2、利用Bresenham算法生成圆(算法的详细原理见教材)。
void CDraw_CirView::OnBre()
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《计算机图形学》课程实验指导一.实验总体方案1.教学目标与基本要求(1)掌握教材所介绍的图形算法的原理;(2)掌握通过具体的平台实现图形算法的方法,培养相应能力;(3)通过实验培养具有开发一个基本图形软件包的能力。

2. 实验平台与考核实验主要结合OpenGL设计程序实现各种课堂教学中讲过的图形算法为主。

程序设计语言主要以C/C++语言为主,开发平台为Visual C++。

每次实验前完成实验报告的实验目的、实验内容、实验原理、实验代码四部分并接受抽查,实验完成后完成实验结果、实验体会两部分,本次实验课结束前提交。

3. 实验步骤(1) 预习教材与实验指导相关的算法理论及原理;(2) 仿照教材与实验指导提供的算法,利用VC+OpenGL进行实现;(3) 调试、编译、运行程序,运行通过后,可考虑对程序进行修改或改进。

二. 实验具体方案实验预备知识OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性。

1)与C语言紧密结合:OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的。

如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL 作图甚至比TC更加简单;2)强大的可移植性:微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统。

而OpenGL 不仅用于 Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机、各种专业计算机(如:医疗用显示设备)上都有应用。

并且,OpenGL 的基本命令都做到了硬件无关,甚至是平台无关;3) 高性能的图形渲染:OpenGL是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL提供强力支持,激烈的竞争中使得OpenGL性能一直领先。

总之,OpenGL是一个非常优秀的图形软件接口。

OpenGL官方网站(英文)下面将对Windows下的OpenGL编程进行简单介绍。

如下是学习OpenGL前的准备工作:1.选择一个编译环境现在Windows系统的主流编译环境有Visual C++,C++ Builder,Dev-C++等,它们都是支持OpenGL的。

但这里我们选择Visual C++ 作为学习OpenGL的实验环境。

2.安装GLUT工具包GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。

Windows环境下的GLUT下载地址:(大小约为150k)/resources/libraries/glut/glutdlls37beta.zipWindows环境下安装GLUT的步骤:1)将下载的压缩包解开,将得到5个文件2)在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\PlatformSDK\include\gl文件夹”)。

把解压得到的glut.h放到这个文件夹。

3)把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\lib”文件夹)。

4)把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。

(典型的位置为:C:\Windows\System32)3.建立一个OpenGL工程这里以VC为例:选择File->New->Project,然后选择Win32 Console Application,选择一个名字,然后按OK。

在谈出的对话框左边点Application Settings,找到Empty project并勾上,选择Finish。

然后向该工程添加一个代码文件,取名为“OpenGL.cpp”。

实验1 像素点的生成1.实验目的:熟悉编程环境;了解光栅图形显示器的特点;了解计算机绘图的特点;利用VC+OpenGL 作为开发平台设计程序,以能够在屏幕上生成任意一个像素点为本实验的结束。

2.实验内容:(1)了解和使用VC的开发环境,理解简单的OpenGL程序结构。

(2)掌握OpenGL提供的基本图形函数,尤其是生成点的函数。

3.实验原理:(1)基本语法常用的程序设计语言,如C、C++、Pascal、Fortran和Java等,都支持OpenGL的开发。

这里只讨论C版本下OpenGL的语法。

OpenGL基本函数均使用gl作为函数名的前缀,如glClearColor();实用函数则使用glu 作为函数名的前缀,如gluSphere()。

OpenGL基本常量的名字以GL_开头,如GL_LINE_LOOP;实用常量的名字以GLU_开头,如GLU_FILL。

一些函数如glColor*()(定义颜色值),函数名后可以接不同的后缀以支持不同的数据类型和格式。

如glColor3b(...)、glColor3d(...)、glColor3f(...)和glColor3bv(...)等,这几个函数在功能上是相似的,只是适用于不同的数据类型和格式,其中3表示该函数带有三个参数,b、d、f分别表示参数的类型是字节型、双精度浮点型和单精度浮点型,v则表示这些参数是以向量形式出现的。

OpenGL定义了一些特殊标识符,如GLfloat,GLvoid。

它们其实就是C中的float和void。

在gl.h文件中可以看到以下定义:……typedef float GLfloat; typedef void GLvoid; ……一些基本的数据类型都有类似的定义项。

(2)程序的基本结构OpenGL程序的基本结构可分为三个部分:第一部分是初始化部分。

主要是设置一些OpenGL的状态开关,如颜色模式(RGBA或ALPHA)的选择,是否作光照处理(若有的话,还需设置光源的特性),深度检验,裁剪等等。

这些状态一般都用函数glEnable(...), glDisable(…)来设置,…表示特定的状态。

第二部分设置观察坐标系下的取景模式和取景框位置大小。

主要利用了三个函数:函数void glViewport(left,top,right,bottom):设置在屏幕上的窗口大小,四个参数描述屏幕窗口四个角上的坐标(以象素表示)函数void glOrtho(left,right,bottom,top,near,far):设置投影方式为正交投影(平行投影),其取景体积是一个各面均为矩形的六面体;函数void gluPerspective(fovy,aspect,zNear,zFar):设置投影方式为透视投影,其取景体积是一个截头锥体。

第三部分是OpenGL的主要部分,使用OpenGL的库函数构造几何物体对象的数学描述,包括点线面的位置和拓扑关系、几何变换、光照处理等等。

以上三个部分是OpenGL程序的基本框架,即使移植到使用MFC的Windows程序中,也是如此。

只是由于Windows自身有一套显示方式,需要进行一些必要的改动以协调这两种不同显示方式。

(3)状态机制OpenGL的工作方式是一种状态机制,它可以进行各种状态或模式设置,这些状态或模式在重新改变它们之前一直有效。

例如,当前颜色就是一个状态变量,在这个状态改变之前,绘制的每个象素都将使用该颜色,直到当前颜色被设置为其它颜色为止。

OpenGL中大量地使用了这种状态机制,如颜色模式、投影模式、单双显示缓存区的设置、背景色的设置、光源的位置和特性等等。

许多状态变量可以通过glEnable()、glDisable()这两个函数来设置成有效或无效状态,如是否设置光照、是否进行深度检测等;在被设置成有效状态之后,绝大部分状态变量都有一个缺省值。

通常情况下,可以用下列四个函数来获取某个状态变量的值:glGetBooleanv()、glGetDouble()、glGetFloatv()和glGetIntegerv()。

究竟选择哪个函数应该根据所要获得的返回值的数据类型来决定。

还有些状态变量有特殊的查询函数,如glGetLight*()、glGetError()和glPolygonStipple()等。

另外,使用glPushAttrib()和glPopAttrib() 函数,可以存储和恢复最近的状态变量的值。

只要有可能,都应该使用这些函数,因为它们比其它查询函数的效率更高。

4.实验代码:一个简单的OpenGL程序如下:(注意,如果需要编译并运行,需要正确安装GLUT,安装方法如预备知识中所述)该程序的作用是在一个黑色的窗口中央画一个矩形、三角形和三个点。

下面对各行语句进行说明:首先,需要包含头文件#include <GL/glut.h>,这是GLUT的头文件。

本来OpenGL程序一般还要包含<GL/gl.h>和<GL/glu.h>,但GLUT的头文件中已经自动将这两个文件包含了,不必再次包含;然后看main函数。

int main(int argc, char *argv[]),这个是带命令行参数的main函数。

注意main函数中的各语句,除了最后的return之外,其余全部以glut开头。

这种以glut 开头的函数都是GLUT工具包所提供的函数,下面对用到的几个函数进行介绍;1)glutInit,对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。

其格式比较固定,一般都是glutInit(&argc, argv)就行;2) glutInitDisplayMode,设置显示方式,其中GLUT_RGB表示使用RGB颜色,与之对应的还有GLUT_INDEX(表示使用索引颜色)。

GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)。

更多信息,以后的实验教程会有讲解介绍;3) glutInitWindowPosition,设置窗口在屏幕中的位置;4) glutInitWindowSize,设置窗口的大小;5) glutCreateWindow,根据前述设置的信息创建窗口。

参数将被作为窗口的标题。

注意:窗口被创建后,并不立即显示到屏幕上。

需要调用glutMainLoop才能看到窗口;6) glutDisplayFunc,设置一个函数,当需要进行画图时,这个函数就会被调用。

(暂且这样理解);7) glutMainLoop,进行一个消息循环。

(现在只需知道这个函数可以显示窗口,并且等待窗口关闭后才会返回。

)在glutDisplayFunc函数中,我们设置了“当需要画图时,请调用myDisplay函数”。

于是myDisplay函数就用来画图。

观察myDisplay中的三个函数调用,发现它们都以gl开头。

相关文档
最新文档