一、教学目标
通过本章的学习,使学生能够了解计算机图形学的基本概念、研究内容;当前的发展概况;本门课程的特点和应用。
二、教学要求
1. 了解计算机图形学的概念和研究内容;
2. 了解本门课程的发展概况。
三、教学内容提要
1. 计算机图形学的研究内容
2. 计算机图形学发展概况
3. 计算机图形学特点和应用
4. 计算机图形学当前研究的课题
5. 计算机图形生成和输出的流水线
四、教学重点、难点及解决方法
本章将主要围绕计算机图形学的基本概念进行介绍,介绍研究内容;当前的发展概况;本门课程的特点和应用等等。
五、课时安排
2学时
六、教学设备
多媒体
七、检测教学目标实现程度的具体措施和要求
通过课堂提问的方式来检测学生对基本概念的掌握程度。
八、教学内容
1.1 计算机图形学的研究内容
计算机图形表现形式
(1).线条式(线框架图)
用线段来表现图形,容易反映客观实体的内部结构,如各类工程技术中结构图的表示,机械设计中零件结构图及电路设计中的电路原理图等。具有面模型、色彩、浓淡和明暗层次效应,适合表现客观实体的外形或外貌,如汽车、飞机、轮船等的外形设计以及各种艺术品造型设计等。
(2).真实感面模型图形
跑车靓照
计算机图形分类(空间)
(1).二维图形(2D) :在平面坐标系中定义的图形
(2).三维图形(3D) :在三维坐标系中定义的图形
计算机图形产生方法
(1).矢量法(短折线法)
任何形状的曲线都用许多首尾相连的短直线(矢量)逼近。
(2).描点法(像素点串接法)
每一曲线都是由一定大小的像素点组成
计算机绘图方式:
(1)交互式绘图
允许操作者以某种方式(对话方式或命令方式)来控制和操纵图形生成过程,使得图形可以边生成、边显示、边修改,直至符合要求为止。如AUTOCAD等
(2)被动式绘图
图形在生成过程中,操作者无法对图形进行操作和控制。如C语言绘图
图形的操作与处理方法(Picture Manipulation)
如图形的开窗、裁剪、平移、旋转、放大、缩小、投影等各种几何变换操作的方法及其软件或硬件实现技术。
图形信息的存储,检索与交换技术:如图形信息的各种表示方法、组织形式、存取技术、图形数据库的管理、图形信息通信等。
人机交互及用户接口技术:如新型定位设备、选择设备的研究;各种交互技术,如构造技术、命令技术、选择技术、响应技术等的研究,以及用户模型、命令语言、反馈方法、窗口系统等用户接口技术的研究。
1.2 计算机图形学发展概况
1962年美国麻省理工学院林肯实验室的Ivan E·Suthland,首先提出了“计算机图形学”(Computer Graphics)这一术语,引入了分层存储符号的数据结构,开发出了交互技术;可用键盘和光笔实现定位、选项和绘图。奠定了计算机图形学基础。
60年代中期美国、英国、法国的一些汽车、飞机制造业大公司对计算机图形学开展大规模研究。
60年代后期出现了存储管式显示器,可以进行简单交互。
1.3 计算机图形学特点和应用
特点:
1.计算机产生的图形有规律、光滑。它是按数学方法产生的,规矩整齐,有着像数学一样的严格性。
2.计算机产生的图形纯净美观、无噪声干扰。
3.通过计算机产生的图形不仅能描绘客观世界的各种对象,也能描绘纯粹是想像的主观世界中的各种对象。
4.交互式计算机图形显示可由用户控制,产生的图形可修改性强,且速度快、差错少。
应用领域:
1.计算机辅助设计(CAD)和计算机辅助制造(CAM)计算机图形学被用来进行土建工程、机械结构和产品的设计,包括设计飞机、汽车、船舶的外形和发电厂、化工厂等的布局,也能够对电子线路或电子器件进行设计。
2.事务管理中交互式绘图
绘制事务管理中的各种图形,如统计数据的二维及三维图形、直方图、线条图、表示百分比的扇形图等等,还可绘制工作进程图,库存和生产进程图以及大量的其他图形。所有这些都以简明的形式呈现出数据的模型和趋势以增加对复杂现象的理解并促进决策的制定。
3.地理信息系统(GIS)
地理信息系统是建立在地理图形基础上的信息管理系统,是图形技术、数据库技术以及管理信息的结合。
4.办公自动化和电子出版技术
图形显示技术在办公自动化和事务处理中的使用,有助于数据及其相互关系的有效表达,因而有利于人们进行正确的决策。利用交互式图形显示技术的支持可以进行资料、文稿、书刊、手册的编写、修改。制图、制表、分页、排版。
5.计算机辅助教学(CAI)
计算机辅助教学系统利用图形显示设备或电视终端,可以有声有色生动地演示物理、化学、生物、外语等教学内容,让学生(用户)使用人机交互手段,进行学习和研究,绘图或仿真操作,使整个教学过程直观形象,有利于加深理解所学知识。
6.过程控制
在过程控制中,常常将计算机与现实世界中的其他设备连成一个系统。计算机图形显示设备常用来显示系统中关键部位的状态,如炼油厂、发电厂的状态显示器可显示出由传感器送来的压力、温度、电压、电流等数据,从而使操作人员可对异常情况作出反应。
1.4 计算机图形学当前研究的课题
1.造型技术
研究的是如何在计算机中构造出二维、三维物件模 型的基本方法和手段。
2.三维信息重建技术
研究一些算法,使得计算机图形系统能自动地将三视图转换成相应的立体图。
3.图形数据库
研究如何以基本的图形为数据项而建立起一个能快速查找各个图形的图形库。
4.动态绘图
在交互式绘图中,不仅可以在屏幕上对图形进行修改、删除、编辑等,还可以进行动态分析。
5.CG、CAD、CAM三者一体化
计算机图形学(CG)、计算机辅助设计(CAD)和计算机辅助制造(CAM)有机结合在一起,形成所谓一体化软件。
6.应用软件开发环境的通用化和标准化
用户界面管理系统UIMS、窗口管理系统、网络文件格式等,并使之通用化和标准化。
7.虚拟现实环境的生成(Virtual Reality简称 VR)
利用计算机生成一种模拟环境(如飞机驾驶舱、操作现场等),通过多种传感、设备使用户“投入”到该环境中,实现用户与该环境直接进行自然交互的技术。
8.科学计算可视化
通过对空间数据场构造中间几何图素或用图形绘制技术在屏幕上产生二维图像。
1.5 计算机图形学生成和输出的流水线
再谈矢量法和描点法
矢量法-向量图形-简单图形-计算机绘图命令-向量图
描点法-点阵图形-复杂图形-文件存储大小-位图
比较:几条自由曲线构成的图形和一幅有炫彩动物的卡通图形
(1) 点阵图形点的信息;
(2) 向量图形的尺寸变化;
九、作业
课后习题
十、本章小结
在本章中,对计算机图形学的基本概念和研究内容进行了概述,对发展概况和应用领域进行了说明。
第2章 计算机图形系统
一、教学目标
通过对本章的学习,要求熟悉计算机图形系统的组成/各种图形显示器、图形输入/输出设备。
二、教学要求
1、了解计算机图形系统的组成;
2、了解计算机图形输入/输出设备的种类。
三、教学内容提要
1.计算机图形系统的组成
2.计算机图形显示器
3.计算机图形输入设备计算机图形输出设备
4.图形核心系统(GKS)简介
5. 通用图形软件简介
四、教学重点、难点及解决方法
重点是熟悉计算机图形系统的组成/各种图形显示器、图形输入/输出设备。
五、课时安排
4学时
六、教学设备
课堂教学
七、检测教学目标实现程度的具体措施和要求
通过课堂提问的方式来检测学生对基本概念的掌握程度。
八、教学内容
2.1 计算机图形系统的组成
一. 图形系统的结构
由硬件和软件两部分组成。
二.图形系统的基本功能及其硬件性能要求
计算机图形系统至少应具有以下五个方面基本功能:
1.计算功能
(1)形体设计和分析方法的程序库,描述形体的图形数据库。
(2)坐标的平移、旋转、投影、透视等几何变换程序库的数据库。
(3)曲线、曲面生成和图形相互关系的检测库。
2.存储功能
在计算机内存储器和外存储器中,应能存放各种形体的几何数据及形体之间相互关系,可实现对有关数据的实时检索以及保存对图形的删除、增加、修改等信息。
3.输入功能
由图形输入设备将所设计的图形形体的几何参数(例如大小、位置等)和各种绘图命令输入到图形系统中。
4.输出功能
图形系统应有文字、图形、图像信息输出功能。在显示屏幕上显示设计过程当前的状态以及经过图形编辑后的结果。同时还能通过绘图仪、打印机等设备实现硬拷贝输出,以便长期保存。
5.对话功能
可通过显示器或其他人-机交互设备直接进行人-机通信,对计算结果和图形,利用定位、拾取等手段进行修改,同时对设计者或操作员执行的错误给予必要的提示和帮助。
为了实现以上功能,对图形系统的硬件性能要求是:
1.处理速度
图形系统的处理速度既与图形系统硬件有关,也与图形软件的图形处理算法有关。
2.存储容量
存储容量包括三部分:内存储容量、显存、外部存储容量和显示缓冲区容量。
3. 处理精度
处理精度主要是指图形采集输入质量和显示输出质量:这里主要指图形分辨率、图形色彩的显示等。而且很大一部分与所采用的图形处理软件有关。
三.图形系统分类及硬件工作平台要求
1.计算机图形系统的分类
根据其硬件配置和信息传递方式分为:
(1) 脱机绘图系统
将输入图形数据在主机内进行处理
将图形处理后的图形数据送入中间介质,用磁盘或磁带控制绘图输出机输出图形
脱机绘图系统是将图形数据和图形输出分别进行处理,避免计算机处于等待状态,加快计算机的工作效率。
(2) 联机绘图系统
将输入图形数据在主机内进行处理
计算机将图形处理信息直接送给绘图机输出图形,不需要中间介质(磁盘或磁带)传递绘图信息,处理时间缩短了。但由于绘图机是机械速度,这样造成了计算机对绘图机等待,降低了计算机工作效率。
(3) 交互式绘图系统
绘图系统将处理结果输出到图形终端(图形显示器)或图形工作站。用户对所显示图形还可用定位、拾取和描绘等设备进行编辑和标注等。
2.计算机图形系统的硬件工作平台
目前,计算机图形系统的硬件平台有如下几种:
(1).微型计算机(简称微机)
随着微型计算机性能进一步提高,用微型计算机实现三维形体的设计及显示能力在不断提高。
(2).工作站
实际上是一类超级微型计算机,该系统主要用于工程设计,为研究、开发提供一整套软硬件工作环境支持。工作站是具有高速的科学计算、丰富的图形处理、灵活的窗口及网络管理功能的交互式计算机系统。美国的SUN、SGI、HP、DEC、IBM等公司均生产此类产品。
(3).中、小型计算机
一般在特定的部门、单位和应用领域中采用此类环境。它是大型信息系统建立的重要环境,这种环境中信息和数据的处理量是很大的,要求机器有极高的处理速度和极大的存储容量。
(4).大型机
以大型计算机为基础,具有容量庞大的存储器和极强的计算功能,大量的显示终端及
高精度、大幅面的硬拷贝设备。还往往拥有自行开发的、功能齐全的应用软件系统。例如,美国第三大汽车公司(CHRYSLER汽车公司)就拥有庞大的计算机系统来进行计算机辅助设计、实体造型、结构分析、运动模拟、工程和科学计算、项目管理、生产过程控制等。
(5).计算机网络
计算机网络是指将上述四类计算机平台,或者其中某一类通过某种互联技术彼此连接,按照某种通信协议进行数据传输、数据共享、数据处理的多机工作环境。
它的特点是多种计算机相连,可以充分发挥各个机器的性能和特点,以达到很高的性能价格比。
网络图形系统要考虑的关键问题是网络服务器的性能,图形数据的通信、传输、共享以及图形资源的利用问题。
1. CRT单色显示原理
电子枪
灯丝加热阴极,阴极表面向外发射自由电子,控制栅控制自由电子是否向荧光屏发出,电子流在到达屏幕的途中,被加速、聚焦成很窄的电子束,由偏转系统产生电子束的偏转电场(或磁场),使电子束左右、上下偏转,在指定时刻在屏幕指定位置上产生亮点。
余辉时间:电子束离开光点后光点保持的时间。
屏幕刷新:荧光亮度随着时间按指数衰减,整个画面必须在每一秒钟内重复显示许多次,人们才能看到一个稳定而不闪烁的图形,因此必须重复地使荧光质发光,即驱使电子束迅速回到同一点。
要保持一幅画面的稳定性,若余辉时间越短,则所需的屏幕输刷新率越高。影响刷新率的最主要因素是显示器的带宽。
荧光粉的质量直接影响到CRT成像效果。
电视
(刷新率低,与其电路相关)
由于影片播放时画面经常切换,一般采用短余辉的荧光粉。若采用长余辉的荧光粉,则会使上一帧图像余辉保留时间过长而出现拖尾和花屏(马赛克)现象
电脑
(刷新率高)
由于电脑画面一般较为稳定,同一帧画面停留时间较长,所以采用与电视相比较长余辉的荧光粉。如果一帧电脑画面停留时间很长,那么需要保证一定的刷新频率才能使该画面不闪烁不变暗
什么是灰度?
灰度就是亮度,简单说就是色彩的深浅程度,在黑白两色中,灰度体现于黑与白的中间状态,也就是灰色。
纯黑(用0表示),纯白(用15表示)
假设总共有16种灰度也就是16种亮度
随箭头越来越亮
那么在彩色变换中同样有灰度的概念,例如R、G、B三种原色,每种原色都有一个灰度值。若一种原色有16种灰度,那么该原色要占4位,256种灰度,那么该原色要占8位
R、G、B三种原色若各有4位,则总共可显示的彩色数目为212种,也即是16×16×16种
两点提示:
(1)彩色图片的色彩变换也叫灰度变换或者色阶变换,R、G、B三种原色按任何比例增强再混合。
(2)在ACDSee或PhotoShop等图片工具栏中选择灰度一项,实际上就是将彩色图像转换为只有黑白两色的灰度图像,但和黑白图像还是不同。
一幅(彩色)图片中,由于各部分的颜色细节不同因而导致各部分的灰度等级不同,这种现象我们称之为“多级灰度”。
多级灰度
提高加速电压后,电子束速度增加,穿透绿色荧光层,显示绿色。电子束速度较低时,轰击荧光屏的能量只能使表层红色荧光粉受激励,产生红色亮点
通过改变电子束电压,就可调节电子束穿透荧光粉层的厚度,从而改变红绿两种发光亮度的比例,合成不同的颜色,因此,可显示红、橙、黄、绿四种颜色。
(2).荫罩式彩色CRT
显示的色彩要比穿透式彩色CRT宽广得多。在荧光屏内壁上分别由红(R)、绿(G)、蓝(B)三种颜色的荧光粉涂成百万个荧光粉点,按RGB顺序分行交替排列成三角形状且相距很近
它们发出三种色彩时分辨不清三种原色,而形成一种颜色
荫罩的金属板,板上按三角形状钻有40~50万小圆孔。前罩式CRT管内按三角形排列安装三个电子枪,发射三条电子束,它们由一个共同偏转系统控制
三条电子束聚焦于荫罩板上的小孔中且相距很近。荫罩的作用是使三条电子束分离开来,分别轰击到三种颜色的荧光点上,调节各个电子枪的电流强度,就可改变相应颜色荧光点的亮度,即合成色中所占比例,达到改变成色的色彩
图形显示系统的类型
根据其电子束轰击屏幕的方式和组成结构可分为三种:随机扫描式显示系统、存储管式显示系统和光栅扫描式显示系统。
技术指标:
分辨率的高低:现在一般在1024×1024以上
显示图形的颜色的种数 :现在一般为真彩色32位
1.随机扫描式显示系统
要显示的图形由计算机处理成为显示器的显示指令(或称显示文件)。图形控制器取出缓冲存储器或固定存储器中的显示指令,依次执行。由管头控制电路使电子束以按所要的亮度偏转到指定位置,从而得到图形。利用电子束在荧光屏上扫描的轨迹画图。显示指令中的亮度、位移量等数字信息经过线产生器的处理转换为控制电子束产生偏转和明暗的物理量,也就是电流和电压。固定存储器中则存放各种常用字符、数字等的显示指令,显示指令经接口电路送到显示器的缓冲存储器。为了获得稳定的画面,必须不断地重复扫描显示文件(即刷新),速度通常为每秒重复扫描25~50次,即每秒25~50帧左右
优点:
能实时地进行数字-视频转换,实现动态显示,易于修改,交互性好
扫描速度快,线条质量高,图形清晰,图线光滑。
缺点:
不能产生多级灰度的真实感显示,图形的复杂程度受显示器扫描速度的限制
价格贵,目前很少使用。
2.存储管式显示系统
利用显示管本身来存储信息技术(随机扫描器使用了一个独立的存储器来存储图形信息)
优点:
图形保持时间长,比较稳定。
电路结构简单,成本低。
缺点:
显示画面速度慢,不适宜动态修改,交互性差。
图形复杂度受到限制。
3.光栅扫描式显示系统
随机扫描式显示器、存储管式显示器:
画线设备,在屏幕上显示一条直线是从屏幕上
一个可编地址点直接画到另一个可编地址点。
光栅扫描式显示器:
画点设备,可以看作是一个点阵单元发生器,
并可控制每个点阵单元亮度,可以生成多种灰度和
颜色,色彩连续变化具有真实感的图形。
(1)光栅扫描式显示系统组成
把计算机送来的图形(如画线、画多边形、画填充区域或写字符等)基本画图命令扫描转换
成为相应的点阵,即位图(bitmap) 点阵的每一点与屏幕像素一一对应,点阵中每个元素就是像素值,通常用1~12位二进制数值来表示灰度或色彩。
位映射(bit mapping)技术:由若干位数据来对应屏幕上一点的光栅图形显示技术将屏幕显示图形的映像(Image),即位图放入显示存储器中。 所以显示存储器又叫位存储器,通常称之为帧缓冲器(Frame Buffer)。为了使CRT屏幕上的图形能持续地进行显示,显示存储器的内容需要不断地读出并送到监视器,使得画面能以一定的频率刷新。显示存储器的分页处理:显示存储器中同时存放多幅画面,这时存储区划分成若干页,每一页存放一幅位图。物理屏幕当前正在显示的页称为可见页(Visual Page)。主机每次只能向一个页进行读写操作,这个页就称作活动页(Active Page)。
存储器的页面可以比屏幕位图大得多,这样屏幕只能显示画面的一部分,通过上下左右移屏功能,用户可以看到显示存储器中的整个画面。
(1)光栅扫描式显示器组成
用来定义像素的颜色。又称为调色板。
彩色表的目的是为了不使显示存储器容量增大,而能显示更多的颜色,例如:显示器要控制三种原色,即R(红)、G(绿)、B(蓝),为了使三种原色按不同的比例合成各种颜色,每种颜色要有不同的灰度,如果每个像素各个原色要16种灰度,于是每个原色要占4位,则每个像素要12位,于是显示存储器容量就要很大,彩色表可解决此问题。
采用彩色表时,显示存储器的像素值不再是直接送到监视器中的颜色值,而仅是颜色的一个
索引(Color Index),即彩色表的地址,用八位表示一个像素值,如编号69(01000101)为彩色表对应地址
从彩色表对应地址项中读出R、G、B三种颜色分量(即颜色号的定义值)然后送监视器
例如:彩色表的字长为 12bit(R、G、B各 4bit),这意味着最多可定义212=4096种不同颜色
彩色表结构
为什么说彩色表的使用节省了存储容量?
彩色表的地址数目是由像素值的位长来决定的,也就是彩色素的多少,也即是一屏能显示颜色数目的多少,例如像素值有8位,那么彩色表的地址=彩色素数目=一屏能显示的颜色数=256
像素值的位长与彩色表的字长(也即是R/G/B三种原色的总位长)无关,例如像素值的位长为8,R/G/B三种原色各有16(256)种灰度,那么彩色表的字长为12(24),该显示系统所能显示的颜色总数为4096(16777216)种,但是每屏最多能显示的颜色数目只有28=256种。
CRT 控制器
使电子束不断地自上而下、自左面右进行屏幕扫描,形成光栅(Raster),产生水平和垂直步信号送往CRT。
2.3 计算机图形输入/输出设备
一. 键盘
二. 鼠标
一.机械式鼠标器
二.光电式鼠标器
三.光机式鼠标器
一种检测装置
功能一般有两种:拾取和跟踪使用时要有相应的软件配合。
数字化仪
数字化仪时常用来摘取放在它上面的工程图上的大量点,经数字化后存储起来,以此作为图
形输入一种手段。
工作原理:数字化仪平板实际上就是一个XY直角坐标系,它上面的任何一点都对应于一个坐标值(x,y),当游标器移动到平板上某一位置时,按一下游标器上的开关,便可获得这一位置的坐标值,并自动地把这个坐标值(x,y)送到计算机内。
只要将画有此曲线的图纸贴在数字化仪的平板上,并移动游标器到各个点A i(i=1,2,……,每次按下游标器上的开关,便把这些点的坐标(x i,y i)自动地送到计算机内
图形输入板则更多用于交互设计,使用时大多划出一个台板图形区,其余部分放置菜单,称为菜单区。
图形区
菜单区
台板图形区与显示屏之间存在着一种映射关系
图形输入板的使用方式有三种:
(1)图形变成数字化信息。
(2)拾取台板菜单区中的菜单项,即取出拾取点的坐标,算出该菜单项的代码并转入相应程序运行。
(3)选择输出坐标数据的方式,共有四种方式。第一种为点方式,即先拾取一个点,接着输出该点的坐标;第二种称连续方式,即随着定位工具的移动,连续输出点的坐标;第三种称开关连续方式,即当定位工具移动且同时按下开关时才能连续输出点的坐标;第四种称增量方式,这时拾取点的坐标以相对于上次拾取点的增量坐标形式输出。以上四种方式可通过选择图形输入板上的有关按钮来决定。
图形扫描仪
直接把图形(工程图纸)和图像(如照片、广告画)扫描输入到计算机中,以像素信息进行存储表示的设备。
按所支持的颜色分:
单色扫描仪和彩色扫描仪
按所采用的固态器件分:
电荷耦合器件(CCD)扫描仪、MOS电路扫描仪和紧贴型扫描仪等;
按扫描宽度和操作方式分:
大型扫描仪、台式扫描仪和手动式扫描仪.
图形扫描基本过程(CCD扫描仪)
扫描光源通过待扫描材料
再经一组镜面反射到CCD
由CCD转换产生图像数据,然后,传输给计算机主机
经过适当的软件处理,以图像数据文件的形式存储或使用。
分辨率:在原稿的单位长度(英寸)上取样的点数,单位是dpi(dot per inch)一般在300dpi-1000dpi
扫描仪的性能指标
支持颜色、灰度等级:目前有4位、8位和22位面颜色、灰度等级的扫描仪。
扫描图形分辨率越高,所需的
储空间就越大。
扫描仪支持的颜色、灰度层次越多,图像的数字化表示就越准确,但同时意味着表示一个像素的位数增加了,因而也增加了存储空间。
显示器、绘图仪、打印机
一. 绘图仪
把由计算机生成的图形输出到图纸(或其它介质)上的硬拷贝设备。
笔绘式
喷墨式
静电式
矢量型设备,绘图笔相对纸作随机移动。
在笔式绘图机上,一个电脉冲通过驱动电机与传动机构使画笔移动的距离称为步距(或称脉冲当量)
步距减小,画出的图就越精细。
1.笔式绘图仪
(1).平台式绘图机
图纸静止不动
导轨做X方向运动
笔架做Y方向运动
机械传动
(2).滚筒式绘图机
绘图纸卷在滚筒上,笔和纸都是运动的。
(3).平面电机式绘图机
采用平面电机驱动,可以取消导轨、横梁及传动机构 。
(4).小型绘图机
结构简单
原理大致与平台式绘图机相同
笔式绘图机的主要技术指标
绘图速度
步距
绘图精度
功能
包括绘图幅面大小(A0,A1,A3……等),画笔数量,以及其他辅助功能(如插补功能、由线拟合功能等)
二、喷墨式绘图仪
喷墨装置多数情况是安装在类似打印机的机头上,纸则绕在滚筒上并使之快速旋转,喷墨头则在滚筒上缓慢运动,并且把青色、品红、黄色,有时是黑色墨喷到纸上。
三、静电绘图仪
绘图分两步:
(1)用静电构造一个不可见潜影
(2)喷上调色剂着色处理进行显影
针点式打印机
激光打印机
细针与色带作为打印装置
利用静电作用
利用喷射墨计作为打印装置
2.4 图形核心系统(GKS)简介
Graphics Kernel System,一种已经被ISO接受的国际图形标准
1. GKS的功能
提供了各种物理的图形输入、输出设备(图形显示器、绘图机。图形输入板等)和应用软件之间的接口。提供了与各种高级语言的接口。
2. GKS的基本概念
1.工作站
由一个操作员操纵使用的一组图形输入/输出设备是一个逻辑上的概念
一个工作站允许有多个输入设备,但只能有一个输出设备。典型的工作站由一个键盘、一个鼠标器和一台图形显示器组成。分为输出型、输入型、输入/输出型(交互式工作站)、元文件输出工作站、元文件输入工作站和图段存储器工作站六种类型。
2.坐标与坐标变换
GKS有三种不同的坐标系
供应用程序使用的实际世界坐标系统(World Coordinate System,简称 WC)
各工作站物理设备使用的设备坐标系(Device Coordinate System,简称DC)
GKS内部使用的规范设备坐标系(Normalized Device Coordinate;简称NDC)
三个坐标系都是二维坐标系
3.GKS图形输出原语
GKS可以输出一些最基本的几何元素如线段、标记、填充封闭区域、文字、符号等。通常二维物体的形状及其相应的画面都可以由这些基本的图形元素来构成。应用程序是通过调用GKS的输出图元功能子程序的方式输出图元的。
GKS的六种图形输出原语 (见书P41)
GKS不仅使用必要的坐标数据来规定上述各种图元的位置、大小及形状、而且可以通过各种属性来指出其外貌,从而使应用程序能很方便地生成符合实际使用要求的多姿多彩的图形。
输出图元属性(见书P42)
4. GKS图形输入设备
六种不同的逻辑输入设备:
定位设备
笔画设备
拣取设备
选择设备
数值输入设备
字符串输入设备
2.5 通用图形软件简介
一、通用图形软件的分类
图形软件的内容非常丰富,它包括二维图形的生成、图形变换、几何交切、裁剪,平面图形的布尔运算,三维图形的生成、变换、隐藏线的消除,三维剪裁,立体造型等。
图形程序包:如PLOT-10、CALCOMP等绘制软件
基本图形资源软件:如GKS及PHIGS标准的软件包,还有SGI公司研发的图形标准库OpenGL。
以及二维、三维交互图形软件,几何造型软件,动画技术软件等
CADAM(Computer-graphics Augmented Design And Manufacture,计算机图形增广设计和制造)
CATIA( Computer-graphics Aided Three-demensional Interactive Application,计算机辅助三维交互应用)
CAEDS(Compute Aided Engineering Design Systems,计算机辅助工程设计系统)
GKS(Graphics Kernel System,图形核心系统)
CBDS2(Circuit Board Design System 2,电路板设计系统2)
PADL(Pat and Assembly Descriptiion Language,零件和部件描述语言)
九、作业
课后习题
十、本章小结
在本章中,介绍了计算机图形系统的组成,各种图形显示器的种类以及输入输出设备等。
第3章 c语言图形程序设计基础
一、教学目标
通过对本章的学习,要求熟悉c语言图形程序设计的基础知识:屏幕颜色的设置、图形颜色设置、线的特性设定和填充。
二、教学要求
1、掌握c语言的图形颜色设置;
2、了解线的特性设定和填充。
三、教学内容提要
3.1 屏幕设置
3.2 图形颜色设置
3.3 线的特性设定和填充
3.4 图形模式下文本处理
3.5 图形存取处理
3.6 常用画图函数简介
3.7 绘图程序实例
3.8 c++语言环境下绘图
四、教学重点、难点及解决方法
重点是了解c语言图形程序设计的基础,包括图形颜色设置,线的特性设定和填充,图形模式下文本处理等。
五、课时安排
8学时
六、教学设备
课堂教学
七、检测教学目标实现程度的具体措施和要求
通过课堂提问的方式来检测学生对基本概念的掌握程度。
八、教学内容
例3.3
# include "graphics.h"
# include “conio.h”
main()
{ int gdriver=DETECT,gmode;
/*自启动搜寻显示器类型和显示模式*/
initgraph(&gdriver,&gmode,"c:\\tc"); /*初始化*/
bar3d(10,20,50,80,0,0);
/*画实心长方形*/
getch(); /*等待按一键*/
closegraph();
/*关闭图形系统,返回文本模式*/
return (0);
}
2. 图形系统的关闭
从上述几个例子已看到在图形编程中均先用函数initgraph()对图形系统进行初始化,即启动图形系统,进人绘图状态,而在程序结束前都用函数closegraph()关闭图形系统,以释放图形驱动程序所占用的内存空间,使系统回到文本文件。
关闭图形系统函数格式为:
void far closegraph();
所有有关图形显示程序一定是在initgraph()和closegraph()之间。从initgraph()后,显示器就进入图形方式,而从closegraph()后,显示器就退出图形方式回到文本显示方式。
3. 图形模式的控制
为了对图形系统模式进行控制,即从图形模式转换成文本模式,或从文本模式转换成图形模式,或设置驱动器有效模式,或读取当前图形模式和范围,Turbo C都提供了相关函数:
(1)从图形模式转换成文本模式
(2)从文本模式转换成图形模式
(3)设置驱动器有效模式
(4)读取当前图形模式和范围
(l)返回当前图形模式值
int far getgraphmode(void);
函数返回当前图形模式,其返回值如表p51 3.2所示。
(2)恢复屏幕在图形初始化前模式
void far restorecrtmode(void);
函数使initgraph()函数所选定图形模式关闭,返回到调用initgraph()前状态。
(3)设置系统图形模式并清屏幕
void far setgraphmode(int gmode);
函数把当前图形模式设置为gmode所指定的模式。
(4)获取图形驱动器可使用的模式范围
void far getmoderange(int driver,int *lomode,int *himode);
该函数确定由driver所指定图形驱动器能够支持的最低和最高模式,并且把这些值放在由lomode和himode所指向变量中。
通过调用此函数,可实现使显示器暂时离开图形模式进入文本模式,进行文本输出,然后不经过initgraph再返回图形模式。
例3.4
#include "graphics.h"
#include "stdio.h"
#include “conio.h”
main()
{ int gdriver,gmode,lo,hi;
gdriver=CGA; /*设置CGA的图形驱动程序*/
getmoderange(CGA,&lo,&hi);
/*获得CGA的图形模式范围*/
printf("CGA surpporting modes range from %d to %d.\dn",lo,hi);
/*显示CGA显示模式范围*/
initgraph(&gdriver,&lo,"c:\\tc");
/*初始化CGAC0*/
bar3d(100,30,130,150,0,0);
/*画一实心方块*/
getch();
gmode=getgraphmode(); /*获得现行图形模式*/
restorecrtmode();
/*返回图形初始化前的现实模式*/
printf("Now in text mode,press any key back to graphics mode. \n");
getch();
setgraphmode(gmode);
/*再回到图形模式*/
rectangle(50,30,100,130);
/*画一长方形*/
getch();
closegraph(); /*关闭图形系统*/
return (0);
}
四、图形坐标的设置
即运用光标定点,确定坐标位置。
可用Turbo C提供的函数来设定坐标(定点),读取当前光标的位置以及x、y轴的最大值。
1.定点
(1)把当前光标移到所需的位置(即x、y点)
void far moveto(int x,int y);
此函数把当前窗口中的当前光标位置(cp)移到所需的(x、y)位置(不是画)。
(2)以增量方式移动当前光标
void far moverel(int delax,int delay);
此函数把光标从当前位置(cp)开始,在x,y方向移动,移动距离分别为delax,delay。
例如:若当前光标位置在(10,10)处,执行下列语句后即移到(20,30)的位置上。
moverel(10,20);
2. 读取当前光标位置
int far getx(void);
此函数返回光标在x轴位置。
int far gety(void);
此函数返回光标在y轴的位置。
例3.6 画一“王”字
3.读取x,y轴的最大值”
int far getmaxx(void);
此函数返回x轴的最大值(最大横坐标)。
int far getmaxy(void);
此函数返回y轴的最大值(最大纵坐标)。
例如:下列语句显示光标当前位置的x、y值:
printf("cp's loc:%d%d",getx(),gety());
3.2 图形颜色设置
在画图时,往往要求配置一定的颜色以使图形光彩夺目。颜色分为前景色和背景色。前景色是指构成字符和图形点的颜色;而背景色是指整个显示屏颜色。Turbo C提供了多个颜色控制函数用来设置前景、背景、改变调色板等。
一、 颜色的设置
画图时,用户可以对当前的背景颜色和作图颜色进行设置。
1. 设置当前背景颜色
void far setbkcolor(int color);
将背景色设置成color所指定的颜色值。参数color可以用名字,也可以用数字,它们对应关系在graphics.h中定义,表3.3(见书P60)列出背景色名称和数值的对应关系。缺省时,默认值为0,即黑色。
2. 设置当前画图颜色
void far setcolor(int color);
该函数把当前画图颜色设置为color所指定颜色,即画笔的颜色。实际对应的颜色和调色板有关,缺省时,默认值是白色。
例3.11 将背景颜色设置为黄色,画笔设置为红色,
画一圆。
#include "graphics.h"
#include "conio.h"
void main()
{int gdriver,gmode;
gdriver=VGA;
gmode=EGAHI;
initgraph(&gdriver,&gmode," ");
setbkcolor(YELLOW);
/*设置背景色为黄色*/
setcolor(RED);
/*设置画笔为红色*/
circle(120,100,50); /*画一圆*/
getch();
closegraph();
}
这是允许的
二、 调色板
调色板:是设置画颜笔的组合
设置当前画笔色与调色板有关,对应一个显示设备可能有多个调色板,这意味着尽管硬件能够显示多种颜色,但由于同一时间内只能使用一个调色板,所以在同一时间内只有显示
设备可能显示总颜色的一个子集可以被显示出来,因为调色板内颜色的数只受到可用视频内存的限制。根据颜色控制方法不同,可以把支持的颜色屏幕划分为两类:一类是CGA,包括CGAHI、MCGAMED、MCGAHI、ATT400MED、ATT400HI;另一类是EGA,包括EGA和VGA适配器。
1、CGA调色板
CGA类屏幕有两种分辨率:低分辨率和高分辨率。
(1)低分辨率
低分辨率方式显示320×200个像素点,4种颜色;
第三章 C语言图形程序设计基础
在CGA低分辨率方式下,可以显示4种颜色,这4种颜色由选择的调色板决定。在CGA方式下可以使用的调色板有CGAC0、CGAC1、CGAC2和CGAC3。每种CGA调色板均含有4种不同颜色,调色板不同所包含的颜色也不一样。
每种调色板只能使用与它列在同一行中的颜色,其编号依次为0、1、2、3,也可以使用符号常量。
表中调色板号是图形方式
而颜色0是背景色,颜色1、2、3是像素点颜色。调色板在initgraph函数中设置,颜色用setcolor函数设置。
背景色默认是黑色
如果setcolor(a),a>=3,那么将显示值最大的那种颜色,例如CGAC0,将显示黄色
(2)高分辨率
高分辨率方式显示640×200个像素点,只有两种颜色。黑色背景和彩色前景。由于CGA本身原因,背景色就是硬件所认为的背景色,可用setbkcolor参照课本P60表3.3设置,前景色(即画笔颜色)始终是青色。
例3.12在高分辨率下画一青色圆。
# include "graphics.h"
#include "conio.h"
void main()
{
int gdriver=CGA,gmode=CGAHI;
initgraph(&gdriver,&gmode, "");
cleardevice();
setbkcolor(3);
circle(160,100,50);
circle(160,100,25);
getch();
closegraph();
}
程序执行后,在青色屏幕上显示两个白色圆图形。
2、EGA调色板
对EGA来说,总共可以有64种颜色,但只有一个调色板,这个调色板只有16项,可同时显示16种颜色。默认的这16种颜色可参看P60表3.3。表3.5(见书P63)的颜色不准确,是随机选取的,不作为参考。
3、改变调色板的一种颜色
void far setpalette(int oldcolor,int newcolor);
此函数改变屏幕系统所显示颜色。它把调色板oldcolor变为newcolor。
(1). 对于CGA模式,
只有背景色能改变,而背景色总是取oldcolor=0
例如,下列语句可把背景色改成绿色:
setpalette(0,GREEN);
Turbo C中好像不支持对该函数的执行
(2).对于EGA模式
可以用setpalette( )函数将某一种颜色设置为16 种不同颜色中的一种。oldcolor是表3.3中任一 颜色,而newcolor是表3.5中前7种颜色。
例如:setpalette(BLUE,EGA-GREEN);
或setpalette(1,2);
将屏幕上的蓝色(BLUE)均变为绿色(EGA-GREEN)
三、获取颜色信息
1. 读取当前背景颜色
int far getbkcolor(void);
该函数返回当前背景颜色,其背景颜色值如表3.3所示。
例如:下列语句显示当前背景颜色:printf("background color is %d",getbkcolor());
2. 读取当前画图颜色
int far getcolor(void);
该函数返回当前画笔颜色。
例如,在CGAC2图形模式下,调色板包含四种颜色:0为背景色,1为绿色,2为红色,3为棕色。如果 getcolor( )函数的返回值为 1,则当前画笔色为绿色。
3.读取最高可用颜色数
int far getmaxcolor(void);
该函数返回当前屏幕模式下最大有效颜色值。在EGA模式下,getmaxcolor()函数返回最大值为15,这表明用setcolor()函数值在0-15有效;在CGA低分辨率模式中,getmaxcolor()函数返回最大值为3,这表明用setcolor()函数值在0-3有效;而在CGAHI模式中,返回值为1,因为画笔始终是青色。
4. 在点(x,y)处画一规定颜色点
void far putpixel(int x,int y,int color);
把color所指定的颜色写到(x,y)处的像素上。
5.读取点(x,y)的颜色
int far getpixel(int x,int y);
此函数返回指定点x,y位置上的像素颜色。
例3.14 在不同位置画点
#include "graphics.h"
#include "conio.h"
void main()
{int gdriver=DETECT,gmode;
int color,i,max;
initgraph(&gdriver,&gmode, "");
max=getmaxcolor();
for(i=0;i<20;i++)
putpixel(50+i*10,20,max);
color=getpixel(50,20);
putpixel(150,150,color);
getch();
closegraph();
}
得到当前屏幕模式下最大有效颜色值
以(50,20)为起点,在X正方向上每隔10用当前屏幕模式下最大有效颜色画点
得到点(50,20)的像素颜色
把color所指定的颜色写到(150,150)处的像素上。
3.3 线的特性设定和填充
一、线的特性设定
用画线函数进行画线时,其默认值均属于一像素点宽度的实线。为了改变线形与线宽,Turbo C提供了可以改变线型和线宽的函数。
void far setlinestyle(int linestyle,
unsigned pattern,int width);
该函数所用三个参数含义如下:
(1)linestyle:为整型值,用来定义所画直线类型
表中前四种为系统预定义的类型,第五个为用户自定义类型。
线型的代号说明
(2)pattern:无符号整型数。该参数在需要用户自定义线型时使用,如果是使用前四种系统预定义的线型,则该参数可取0值。
(3) width:整型数。指定所画直线的粗细,以像素为单位,分为两种情况
通过上述几个参数的不同组合,就可以根据需要画出不同类型、不同粗细的直线。
例如:setcolor(RED);
Setlinestyle(DASHED-LINE,0,THICK-WIDTH);
line(10,20,150,70);
从(10,20)到(150,70)用一条红色的3个像素宽点划线
当函数setlinestyle的第一个参数为USERBIT-LINE(或4)时,可以由用户自己定义直线类型。此时,第三个参数意义同前,直线类型在第二个参数中定义,该参数是一个16位二进制码,每一位(bit)表示一个像素。某一位置1时表示直线上相应位置以当前颜色显示;如果某位为0,则其对应像素不显示或不改变(仍用原来颜色)。
例如:1111 1111 1111 1111
16位全置1,因此画一条16个像素的点实线(就是实线)。
1010 1010 1010 1010
则隔位置1,因此画一条16个像素的点虚线(就是点线)。
在实际编写程序时,一般把16位二进制数转换为4位十六进制数,每4位二进制数转换为1位十六进制数,故上面两个例子转换为十六进制数为:FFFF和AAAA
函数调用方法为:setlinestyle(4,0xAAAA,1);
用这种方法,可以根据需要定义各种线型。
#include <graphics.h>
例3.15演示系统预定义的四种线型
#include "conio.h"
#include "stdio.h"
void main()
{
int i,j,c,x=50,y=50,k=1;
int gdriver=DETECT,gmode;
printf("input color number.\n");
scanf(“%d”,&c); /*输入所选择的颜色*/
initgraph(&gdriver,&gmode, "c:\\tc")
cleardevice();
setbkcolor(11); /*设置背景色为浅青色*/
setcolor(c); /*设置前景色为输入颜色*/
for(j=1;j<=2;j++)
{for(i=0;i<4;i++)
{setlinestyle(i,0,k);
rectangle(x,y,x+210,y+80);
x=x+110;
y=y+40;
}
k=3;
x=50;
y=250;
}
getch();
closegraph();
}
Setlinestyle(1,0,1) ,线型为点线, 1个像素宽
Setlinestyle(2,0,1) , 线型为中心线, 1个像素宽
当输入颜色为红色时结果如下:
Setlinestyle(0,0,1),线型为实线, 1个像素宽
Setlinestyle(1,0,3),线型为点线,3个像素宽
Setlinestyle(2,0,3),线型为中心线, 3个像素宽
Setlinestyle(3,0,3),线型为虚线, 3个像素宽
Setlinestyle(0,0,3),线型为实线,3个像素宽
Setlinestyle(3,0,1),线型为虚线, 1个像素宽
2.设置文本对齐方式
void far settextjustify(int horiz,int vert);
此函数规定文本输出在水平和垂直方向上的输出方式.参数horiz和vert是整型数, 用来确定文本输出的当前对齐位置。
horiz和vert的取值
horiz确定
水平方向的
对齐位置
vert确定垂直方向的对齐位置。
例如,执行settextjustify(RIGHT_TEXT,BOTTOM_TEXT);
后,若执行outtextxy(100,120,"AAAAAAAAAAAA");
则(100,120)指的是所输出字符串右下角。在缺省情况
下,对齐方式是 LEFT_TEXT,TOP_TEXT,如果用outtextxy
输出上面字符串,则(100,120)指的是字符串左上角。
3.改变矢量字体宽度和高度
void far setusercharsize(int multx,int divx,
int multy,int divy);
此函数设置了用户定义的笔画字型放大系数,x、y方向的放大系数分别为multx/divx,multy/divy。调用setusercharsize()函数之后,每个显示在屏幕上的字型都以缺省值大小乘以multx/divx为字符宽,乘以multy/divy为其字符高。这种方式只是在settextstyle()函数中的charsize=0时才起作用。
用户自定义字符的大小,即USER_CHAR_SIZE(默认为0)
3.5 图形存取处理
在图形方式下,图形存取有着重要的作用,这也是图形动画的基础。图形存取的基本原理是:把屏幕上某个区域的信息存入一个缓冲区,然后在另一个区域把它的内容显示出来。
一、 检测所需内存
unsigned far imagesize(int x1,int y1,int x2,int y2);
该函数返回一个无符号整数值,它是存储图形所需的字节数。参数x1,y1,x2,y2均为整型数,用来确定要存储的屏幕区域。这个区域是一个矩形,其左上角坐标为(x1、y1),右下角坐标为(x2,y2)。
例如:执行 unsigned size;
size=imagesize(10,10,100,100);
将把存储左上角为(10,10),右下角为(100,100)的矩形区域所需的内存字节数存人变量size中。存储屏幕区域所需的字节数最多不能超过 64K-1个字节,否则返回值为-1( 0 xFFFF)。也就是说,图形存取限制在64K字节之内。
二、 图形存入内存
void far getimage(int x1,int y1,int x2,int y2,void *bitmap);
该函数将指定区域的图形从屏幕拷贝到内存区域。要复制的屏幕区域由左上角(xl,y1)和右下角(x2,y2)给出,它应当与imagesize函数中参数相同。bitmap是一个void类型指针,需要复制的屏幕区域将保存在由它所指向的数组中。
例如:void *w;
unsigned size;
size=imagesize(10,10,100,100);
w=malloc(size);
getimage(10,10,100,100,w);
malloc函数的作用是得到指向大小为括号的内存区域的地址指针,它放置在stdlid.h中。
三、 从内存复制图形到屏幕
void far putimage(int x,int y,void *bitmap,int op);
该函数将getimage函数保存的图形重新送回屏幕。参数(x,y)是恢复显示图形左上角的位置,bitmap是指向void类型的指针,它指向用getimage函数复制的数组。参数op是一个整型数,是图形复制到屏幕上显示方式
参数OP的取值
如果想使原来的图形反相显示则可使用下面语句:
putimage(110,10,W,NOT_PUT)
如果使用XOR-PUT,则内存中的像素与当前屏幕上的像素进行异或操作。如果两个像素都为1,则相应的位被置为0,从而使原来的图形消失。如果再复制一次,则会重新出现。利
用这一特性,可以实现动画操作。
3.6 常用画图函数简介
一、 直线类函数
1.指定两点间画一直线
void far line(int x1,int y1,int x2,int y2);
用当前颜色从点(x1,y1)到点(x2,y2)画一条直线,当前位置(CP)不变。
2.从当前位置到(x,y)点画一条直线
void far lineto(int x,int y);
用当前颜色从当前位置(CP)到(x,y)点画一条直线,并把(CP)位置定位在(x,y)点。
3.从当前坐标以相对增量方式画直线
void far linerel(int deltax, int deltay)
从当前位置到相对CP位置在X方向增大deltax,在Y方向增大deltay画一直线。
二、 多边形类函数
1、画矩形
void far rectangle(int left,int top,int right,int bottom);
用当前画笔画出由坐标(left,top)及(right ,bottom)所定义的矩形。
2.画多边形
void far drawpoly(int numpoints,int *polypoints);
用当前画笔画一多边形,多边形的顶点数为numpoints, *polypoints指向一个整型数组,共有numpoints*2个整数组成,每一对整数给出一个多边形顶点(x,y)坐标。
三、 圆弧类函数
1、画一圆弧
void far arc(int x,int y,int startangle,int endangle,int radius);
以(x,y)为圆心,radius为半径,从起角startangle到终角endangle,以当前颜色画一圆弧。
2. 画一椭圆弧
void far ellipse(int x, int y, int start,int end, int xradius, int yradius);
用当前颜色画一椭圆弧,其圆心为(x,y),x轴、y轴半径分别为xradius,yradius,起始角和结束角分别为star和end。若起始角star为0°,结束角end为360°,则画的是一个完整的椭圆。
3. 画一圆void far circle(int x, int y, int radius);
以(x,y)为圆心。以radius(用像素表示)为半径,用当前画笔颜色画一圆。
四、 填充类函数
1、画矩形条
void far bar(int left,int top ,
int right,int bottom);
画一矩形条,该条用当前填充模式和填充色填充。条的左上角由(left,top)给出,条的右下角由(right,bottom)给出。只画矩形条,不画出条形轮廓,由setfillstyle()定义填充模式和填充色。
2.画三维矩形条
void far bar3d(int left, int top,
int right, int bottom,
int depth, int topflag);
画一三维矩形条,该条用当前填充模式和填充颜色填充,条左上角由(left,top)给出,条的右下角由(right,bottom)给出,以像素为单位,条形深度由depth给出,topflag不为零时则放一个顶盖,否则该三维矩形条无顶盖,由setfillstyle()函数给出填充模式和颜色。
3.画多边形并填充
void far fillpoly(int numpoints,
int *polypoints);
用当前画线类型和颜色,画一顶点数为numpoints的多边形,然后用当前填充模式和填充颜色填充这个多边形,polypoints所指数组共有numpoints*2个整数,每一对整数对应给出多边形一个顶点的x和y坐标。由setfillstyle()函数给出填充模式和颜色。
4.画一扇形并填充
void far pieslice(int x, int y, int stangle,
int endangle, int radius);
以(x,y)为圆心,radius为半径,stangle为起始角,endangle为终止角,画上扇形,并且以当前填充模式和颜色填充。该函数用当前画笔画出扇形外廓线。由setfillstyle()为函数给出模式和颜色。
5.画一个椭圆扇区并填充
void far sector(int x, int y,int stangle,
int endangle, int xradius, int yradius)
以(x,y)为圆心,xradius为水平轴,yradius为垂直轴,stangle为起始角,endangle为终止角,画一个椭圆扇区,并用当前填充模式和颜色填充,该函数用当前画笔画出椭圆扇区外廓线。由setfillstyle()函数给出模式和颜色。
九、作业
课后习题
十、本章小结
在本章中,介绍了在c语言下进行图形程序设计的基础知识:图形颜色设置,线的特性设定和填充,图形模式下文本处理等。
第4章 第四章 二维图形生成和变化技术
一、教学目标
通过对本章的学习,要求熟悉二维图形的基本绘图元素,特别是直线段的生成和曲线的生成。
二、教学要求
1、掌握直线段的生成;
2、掌握区域填充的方法。
三、教学内容提要
4.1 基本绘图元素
4.2 直线段的生成
4.3 曲线的生成
4.4 区域填充
4.5 二维图形变换
4.6 二维图像裁剪
4.7 反走样技术
四、教学重点、难点及解决方法
重点是掌握直线段和曲线的生成。
五、课时安排
8学时
六、教学设备
课堂教学
七、检测教学目标实现程度的具体措施和要求
通过课堂提问的方式来检测学生对基本概念的掌握程度。
八、教学内容
δ=tgβ-tgα=
当δ<0时,表示笔在OA线段下方,应该向+Y方向走一步
当δ>0时,表示笔在OA线段上方,应该向+X方向走一步
由于分母XMXA>0,因此只需判断分子 YMXA-YAXM的正负
即可,得偏差公式:
FM=YMXA-YAXM
对任意点,偏差函数的一般形式为:
Fi=XAYi-YAXi
其中,XA,YA是终点A坐标。
2)递推公式
由公式可以看出,由于每次要计算两次乘法和一次减法,所以计算工作量大, 为了简化计算,可设法用前一点的偏差来推算后一点的走步方向以及走步后的偏差,这种方法称为递推法。递推公式很容易用计算机实现。
递推公式可根据下图用偏差函数判断笔进方向的图例得出
设笔当前位置为 M1(X1,Y1),此时F1=Y1XA- YAX1<0,应走+Y一步到M2即X2=X1,Y2=Y1+1,+1表示走一步M2处的偏差为:F2=Y2XA-YAX2=F1+XA(用X2=X1,Y2=Y1+1代入得到)
若F2≥0,应走+X一步到M3,则X3=X2+1,Y3=Y2,M3处的偏差为:F3=Y3XA-YAX3=Y2XA-YAX2-YA=F2-YA
这样依次进行下去,就得到第i步的递推公式 :
当Fi≥0时,向+X方向走一步,此时偏差Fi+1=Fi-YA(i=1,2,……n)。
当Fi≤0时,向+Y方向走一步,此时偏差Fi+1=Fi+XA(i=1,2,……n)。
偏差Fi的推算,只用到终点坐标值XA ,YA而与中间点的坐标值无关,且只需进行加减运算。
3)任意象限偏差计算
对于第二、三、四象限的直线,也可类似推出。当直线段处于第二、三、四象限时,偏差值的计算及走步方向如下表所示:
二、 数值微分法(DDA法)
1.定义
数值微分法即DDA法(Digital Differential Analyzer),这是一种基于直线的微分方程来生成直线的方法。
2.数值微分法的原理
设(x1,y1)和(x2,y2)分别为所求直线的端点坐标,由直线的微分方程得
可通过计算由x方向的增量Δx引起y的改变来生成直线,
由yi+1=yi+Δy(yi为直线上某步的初值)
则 可通过计算由y方向的增量引起x的改变来生成直线
若设Xi+1=Xi+Δx 则:实际上是一个递推公式,即yi+1由前一点的yi和X的增量
求得; Xi+1由前一点的Xi和Y的增量求得。
3.DDA的算法基本思想
选定x2-x1和y2-y1中较大者作为步进方向(假设x2-x1较大)取该方向上的Δx为一个像素单位长, 即x每次递增一个像素,然后利用前面公式计算相应的y值,把每次计算出的(xi+l, yi+1)经取整后顺序输出到显示器,则得光栅化后的直线。
为什么取x2-xl和y2-y1中较大者步方向?
此图中Y2-Y1=8>X2-X1=4
三、 Bresenham法
1、问题提出
DDA法就是根据直线的斜率来计算出下一个y值,经取整后以确定下一个像素点,因为进行取整运算,这就难以避免所取像素点偏在实际直线的某一侧。而Bresenham算法根据直线的斜率确定或者选择变量在X轴或Y轴方向每次递增一个单位,其变量的增量值根据实际直线与网格交点与像素点的距离来选择像素点而取0或1,这距离称为误差,记作e。
(1)偏差e
实际直线与网格交点与像素点之间的距离称偏差e。以左图第一个八分图的直线为例,即直线的斜率在0~1之间。
若通过(0,0)的直线的斜率大于1/2,即e>l/2,它与x=1直线的交点离y=l直线较y=0直线近,因此取像素点(1,1)。具体见图中的e2
如果斜率小于l/2,即e<l/2,则应取像素点(l,0)。具体见图中的e1
当斜率等于 l/2时,即 e=l/2,没有确定选择标准,但算法选择(l,l)像素点。
e>1/2
e<1/2
2、Bresenham法基本思想
Bresenham法基本思想是:使得每次只要检查误差项的符号就可以决定实际的增量。
(2)偏差e的计算
由图可知,在步进一个像素点后的误差为原误差加上直线的斜率,即e=e+Δy/Δx
为了简化判断可设e’=e-l/2,这样只要判断e’的符号即可,首先令误差项的初值为-1/2。
初始,如果e’=Δy/Δx-1/2大于或等于零,则x加1,y加1;如果小于零,x加1,y不动(由前面的图可以看出)。
4.3 曲线的生成
在科学技术中常常需要绘制曲线,而绘制曲线的根据或要求各不相同,通常遇到的约有下述几种情况。
(1)规则曲线的绘制:已知曲线的方程,要求画出曲线
(2)曲线拟合:由试验或观测得到了一批数据点,要求用一个函数近似地表明数据点坐标间的关系,并画出函数的图像(曲线)。
(3)曲线插值:由试验、观测或计算得到了由若干个离散点组成的点列,要求用光滑的曲线把这些离散点连结起来。曲线插值与曲线拟合不同,拟合并不要求曲线通过数据点。
(4)曲线逼近:在曲线形状设计中,给定了折线轮廓,要求用曲线逼近这个折线轮廓。
上述各类问题都要求画出曲线,不同的是,规则曲线的绘制中曲线的方程为已知,而曲线拟合、曲线插值、曲线逼近问题则需要首先找出或构造出曲线的方程,再根据曲线方程画出曲线。除圆等少数曲线外,根据方程画曲线一般是先计算出曲线上一系列适当靠近的点,然后依次将这些点用直线连起来,得到一条由折线表示的近似曲线。只要这些点靠得足够近,看起来就是一条光滑的曲线。
当判断结果落在圆外时,向-X方向走一步。直到再次到达圆内为止。
一、圆弧的生成
1.逐点比较法
(1)基本思想
逐点比较法绘制圆弧的原理与逐点比较法生成线段类似,也是在图形输出设备上每步输出逼近欲画的圆弧。
用逆时针画第一象限中的AB圆弧的过程如下:
从始点(xA,yA)点开始画起,首先向圆内走一步,也就是先向-X方向走一步,然后与所要画的圆弧进行比较
判断结果,落在圆内时向Y方向走一步,依次类推,一直到达圆处为止
当画到终点以(xB,yB)时,终止比较,AB圆弧绘制结束。
逐点比较法绘制圆弧时一般定为先进后出,有顺圆走向和逆圆走向两种移动规则。
顺时针走向
逆时针走向
(2)判别函数
从上面绘制圆弧的过程可知,归根到底,是用什么方法来比较当前点是否落在圆内,还是落在圆外,然后决定走向。设圆心为o(x0,y0),起点坐标为A(xA,yA),终点坐标为B(xB,yB),并假定绘图笔当前点位置为M(xM,yM),于是圆的半径为R,即
令FM=RM-R作为判别函数。为了简化计算,取
(由于RM-R很小)作为判别函数,显然:
①FM<0,表示M点在圆弧内 走+Y方向
②FM>0,表示M点在圆弧外 走-X方向
③FM=0,表示M点在圆弧上 走-X方向(约定)
因此,根据FM的正负,可以确定走向。
2、数值微分法(DDA法)
(1)一般DDA法
1)一般递推公式
圆弧的DDA法和直线段DDA法类似,也是根据圆弧的微分方程来实现的,我们以圆心在坐标系原点,半径为R的一段圆弧为例来讨论。
角度DDA法比上面介绍的DDA法更加容易理解,它实际上就是把圆或圆弧分成N等分。用N段相邻的直线来逼近圆或圆弧,这种方法显然是建立在直线段生成算法的基础之上的,因而其效率要低些,但很好理解。
二、椭圆的生成(Bresenham法)
(1)基本思想
主要考虑标准椭圆的生成,中心在原点(中心若不在原点可以通过平移得到),长短半轴都是对称的。由于椭圆是轴对称函数,因此只要考虑第一象限的情况,其它象限中像素点的位置可以通过对称性得到。
在介绍直线段生成的时候,Bresenham方法实际上就是每一步在某直线真实点周围的若干像素点中选取一个最靠近真实点的像素作为该步的绘制点。
同理,在椭圆的Bresenham法中也是采用了相同的机制予以实现。为了更加准确的判定出哪个像素点是最近点,引入了一个中点加以辅助判断,因此,也将该方法称为中点Bresenham算法。
(2) 标准的椭圆方程
其中,a和b分别是椭圆的长短半轴的半径
在第1象限的椭圆弧需要做一个划分,即同时经过椭圆弧上斜率为-1的切线点与原点的直线将第1象限划分为两个区域,如图4.21所示。
在上半区,?x的增量比较重要,而在下半区,?y的增量更为明显。
(3) 原理详解和判别公式
如图4.22所示,先考察上半区的放大方格,像素点P(xp, yp)是当前选取的像素点,由于上半区主要考虑X方向上的增量,因此下一步有两个候选的像素点,分别是H(xp+1, yp)和L(xp+1, yp-1)。
将标准的椭圆方程进行改写,可得F(x, y)=b2x2+a2y2-a2b2=0
通过观察,可以判定H点距离椭圆的真实点更加靠近,因此下一步应该选取H点作为椭圆像素点。当然,计算机必须通过严格的计算才能得出这一结论。引入点M(xp+1, yp-0.5)作为H点和L点之间的中点,由此可以定义判别公式如下:
dTM= F(xp+1, yp-0.5)=b2(xp+1)2+a2(yp-0.5)2-a2b2
dTM= F(xp+1, yp-0.5)=b2(xp+1)2+a2(yp-0.5)2-a2b2
(1)如果dTM <0,就选择像素点H,并且引入新的中点,即M的下一个中点M’(xp+2, yp-0.5),此时将M’代入判别公式,将得到:
dTM’= F(xp+2, yp-0.5)=b2(xp+2)2+a2(yp-0.5)2-a2b2= dTM +b2(2xp+3)
可知b2(2xp+3)为? dTM。
(2)如果dTM >0,就选择像素点L,并且引入新的中点,即M的下一个中点M’’(xp+2, yp-1.5),此时将M’’代入判别公式,将得到:
dTM’’= F(xp+2, yp-1.5)=b2(xp+2)2+a2(yp-1.5)2-a2b2= dTM +b2(2xp+3)+ a2(-2yp+2)
可知b2(2xp+3) + a2(-2yp+2)为? dTM。
这样只要根据? dTM的值是否为正或负,就可以完成椭圆弧上半区的绘制工作。
同理,椭圆弧下半区主要考虑Y方向的步进, 其原理和上半区是相同的。
下面来讨论图4.22两个区域中点M的初始值问题。由于椭圆的起始点为(0, b),因此第一个中点MT0的坐标为(1, b-0.5),对应的判别公式为dT0= F(1, b-0.5)= b2+a2(-b+0.25)。假设上半区的最后一个点的坐标为(x, y),则判别所需中点的坐标为(x+0.5, y-1),对应的判别公式为dB0= F(x+0.5, y-1)= b2(x+0.5) 2+a2(y-1) 2-a2b2。
椭圆的生成实际上是圆的特殊情况,那么中点Bresenham算法是否能够用于圆弧的生成呢?答案是肯定的而且更为简便,圆弧具有八方对称性,因此只需要画出八分之一圆弧就可以了。
4.4区域填充
区域是指相互连通的一组像素的集合。区域通常由一个封闭的轮廓来定义,处于一个封闭轮廓线内的所有像素点即构成一个区域。
所谓区域填充就是将区域内的像素置成新的颜色值或图案。区域填充是计算机绘图的一种基本操作,相当一部分绘图都用到它。
对于区域填充来说,它要解决两个问题:
①确定需要填充哪些象素,
②确定用什么颜色或图案。
处于一个封闭轮廓线内的所有像素点即构成一个区域
区域填充就是将区域内的像素置成新的颜色值或图案
我们知道多边形是常用基本图形,它是由一组边围成,封闭区域,多边形也可以是凸、凹或是带空洞。多边形区域填充就是将区域内的像素置成新的颜色值或图案。由于任何一个封闭曲线都可以用多边形来逼近,所以多边形填充实用面广。
一、多边形区域填充
1.区域内部点判断准则
区域填充首先判断一个象素点是否处于多边形区域内,其判断准则如下:
从该点向无穷远处引出一条射线(也称扫描线),若射线与区域边界交点目标数目为奇数,则此点在区域内。若射线与区域边界交点目标数目为偶数,则此点为区域外点。
(2)当扫描线重合多边形某条边界水平线时,如该水平边线前后两条边线是一上一下的,则该水平边线两个端点作为一个交点,即扫描线与该水平边界线相交了一次。
2.边相关性及边记录
很显然,不能利用区域内部点判别准则对显示平面上每个点逐个判别,这样计算量太大。
事实上,相对于一个给定多边形区域来说,显示平面上每个像素点内外特性是互相关联的。相邻像素间具有相关属性。在实施多边形填充时,利用扫描线相关性,就无需对扫描线上所有像素点逐个地进行内外特性判断,只需对一条扫描线从左到右求出该扫描线与区域边界交点,这些交点必将扫描线分成内外交替线段,这些交点x值大小依次排列。
3.边表ET和活动边表AET
(1)边表ET
边表是一个包含多边形全部边记录的表,它按y坐标(与扫描线一一对应)递增(或递减)的顺序存放区域边界的所有边。每个y坐标值存放一个或者说几个边记录。当某条扫描线yi碰到多边形边界的新边时(以边线底端为准),则在ET表中相应的y坐标值处写入一个边记录。当同时有多条边进入时,则在ET表中按链表结构写入相应数目的多个记录,这些记录是按边线较低端点的x值增加的顺序排列。当没有新边加入时,表中对应的y坐标值处存储内容为空白。
注意:在ET表中:①与x轴平行的边不计入。②多边形的顶点分为两大类:一类是局部极值点,如下图中的P1、P3;另一类是非极值点,如下图中的P2、P4、P5。当扫描线与第一类顶点相遇时,应看作两个点;当扫描线与第二类顶点相遇时,应视为一个点。
⑵活动边表AET
活动边表AET是一个只与当前扫描线相交的边记录链表。随着扫描线从一条到另一条的转换,AET表也应随之变动,利用 yi+1=yi+1, xi+1=xi+1/m
可以算出AET表中x域中的新值xi。凡是与这一条扫描线相交的任何新边都加到AET表中,而与之不相交的边又被从AET表中删除掉了。下图列出了图4.40中多边形在扫描线为4、5、6时的AET表。AET表中的记录顺序仍是按x增大排序的。
4.多边形区域填充算法过程
(1)根据给出的顶点坐标数据,按y递增顺序建立ET表
(2)根据AET指针,使之为空。
(3)使y=Ymin (Ymin为顶点坐标中最小y值)。
(4)反复做下述各步,直至y=Ymax(顶点坐标中y的最大值)或ET与AET为空:
①将ET表加入到AET中,并保持AET链中的记录按x值
增大排序。
②对扫描线yi依次成对取出AET中xi值,并在每对xi
之间填上所要求的颜色或图案。
③从AET表中删去yi=ymax的记录。
④对保留下来的AET中的每个记录,用xi+1/m代替xi
,并重新按x递增排序。
⑤使yi+1,以便进入下一轮循环。
①开始y=1,将ET表中y=1结点加入至AET表,同时保持AET链中记录按x增大排序
②由于上例中是6-6,是顶点,所以中间不填象素颜色。
③上例由于而Ymax=3和5,所以不必删去,当yi=3时,此时
就得将第一个结点即(3,6,-2)删去。
④对保留下来的AET中的每个记录,用xi+1/m代替xi,并重新按x递增排序。如上例变成(实际求出y=2时新的交点x坐标)
⑤使yi+1,以便进入下一轮循环。即y=2再进入以上循环
继续:①由y=2,ET表中是空,所以不需ET表加入AET表
②取x=4和x=6.5,将4-6.5之间填上象素颜色。
③由于y=2,不必删去结点。
④再改变xi的值为
⑤使yi =3,重复继续。继续:①由y=3,将ET表中y=3结点加入,即
②将2-7之间填上象素颜色。
③删去结点Ymax=3 结点。
④再改变xi的值为
⑤使yi =4,重复继续。
二、 边填充
边填充算法的基本原理是:
(1)对多边形的每条边进行直线扫描转换,即对多边形边界经过的像素打上边标志;
(2)对多边形内部进行填充。填充时,对每条扫描线,依从左到右的顺序,逐个访问扫描线上的像素,用一个布尔量来标志当前点是在多边形内部还是外部(一开始设布尔量的值为假,当碰到设有边标志的点时,就把其值取反;对没有边标志的点,则其值保持不变)
(3)将其布尔量值为“真”的内部置为图形色,把其布尔量的值为“假”的外部点置为底色即可。
三、 种子填充
1、种子填充基本思路
首先假设在多边形区域的内部,至少有一个像素点(称为种子)是已知的,然后算法开始搜索与种子点相邻且位于区域内的其它像素。如果相邻点不在区域内,那么到达区域的边界;如果相邻点位于区域内,那么这一点就成为新的种子点,然后继续递归地搜索下去。
区域的连通情况可以分为四连通和八连通两种
四连通区域:各像素在水平和垂直四个方向上是连通的八连通区域:各像素在水平、垂直以及四个对角线方向上都是连通的。
在种子填充算法中,如果允许从四个方向搜寻下一个像素点,则该算法称为四向算法;如果允许从八个方法搜寻下一个像素点,则该算法称为八向算法。一个八向算法可以用在四连通区域的填充上,也可用在八连通区域的填充上;而一个四向算法只能用于填充四连通区域。无论是四向算法还是八向算法,它们的填充算法基本思想是相同的。为简单起见,下面只讨论四向种子填充算法。
2.简单种子填充算法
这是对内定义区域进行填充的算法,此算法所采用的基本方法是:将(x,y)点与边界值相比较,检测该点的像素是否处在区域之内;同时与新值相比,以确定该点是否已被访问过。这种测试的前提条件是:在初始状态下,区域内没有一个像素已被设置为新值;同时允许新值等于边界值。
如果用堆栈的方法来实现简单种子填充算法,则算法的基本步骤如下:
(1)种子像素压入堆栈。
(2)当堆栈非空时,重复执行以下操作。
①从堆栈中推出一个像素,并将该像素置成所要的值;
②对于每个与当前像素邻接的四连通像素,进行上述两
部份的测试;
③若所测试的像素在区域内且又未被填充过,则将该像
素压入堆栈;
(递归)泛填充算法
内点表示的4连通区域
void FloodFill4(int x,int y,int oldColor,int newColor)
{ if (GetPixel(x,y) == oldColor)
{ PutPixel(x,y,newColor);
FloodFill4(x+1,y,oldColor,newColor);
FloodFill4(x,y+1,oldColor,newColor);
FloodFill4(x-1,y,oldColor,newColor);
FloodFill4(x,y-1,oldColor,newColor);
}
}/*end of FloodFill4() */
取(x,y)为种子点
特点:
(1) 有些象素会入栈多次,降低算法效率;栈结构占空间。
(2) 递归执行,算法简单,但效率不高,区域内每一象素都引起一次递归,进/出栈,费时费内存。
种子填充法
上述简单种子填充算法操作过程非常简单,却要进行深度的递归,这不仅要花费许多时间,降低了算法的效率,而且还要花费许多空间要构造堆栈结构。因此出现了改进的扫描线种子填充算法。
3.扫描线种子填充算法
扫描线种子填充算法适用于边界定义的四连通区域。区域可凹可凸,还可以包括一个或多个孔。在边界定义区域外或与其邻接的区域中像素的值或颜色不同于填充区域或多边形的值或颜色。
其基本思想是以种子所在扫描线进行从左到右填充直至边界为止
借助于堆栈,算法可分为以下五步实现:
初始化。将算法设置的堆栈置为空。将给定的种子(x,y)压入堆栈。
出栈。如果堆栈为空,算法结束。否则从包含种子像素的堆栈中取出栈顶元素(x,y)作为种子像素。
区间填充。沿当前扫描线对种子像素的左右像素进行填充(像素值为new_color),直至遇到边界像素为止,从而填满包含种子像素的区间。
(4) 定范围。以xl和xr分别表示步骤(3)区间内最左和最右的两个像素。
(5) 进栈。在xl≤x≤xr中,检查与当前扫描线相邻的上下两条扫描线是否全为边界像素(boundary_color)或者前面已经填充过的像素(new_color),是则转到步骤(2),否则在xl≤x≤xr中把每一个区间的最右像素作为种子像素压入堆栈,再转到步骤(2)继续执行。
4.5 二维图形变换
一、图形变换基本概念
1、定义
即对原图形进行平移、旋转、缩小或放大等变换操作。
在计算机图形显示或绘图输入过程中,往往需要对图形指定部分的形状、尺寸大小及显示方向进行修改,以达到改变整幅图形的目的,这就需要对图形进行平移、旋转、缩小或放大等变换操作。因此,图形变换是计算机绘图基本技术之一,利用它可以用一些很简单的图组合成相当复杂的图,可以把用户坐标系下的图形变换到设备坐标系下。利用图形变换还可以实现二维图形和三维图形之间转换,甚至还可以把静态图形变为动态图形,从而实现景物画面的动态显示,下面主要讨论二维图形变换。
2、图形变换分类
图形变换有两种形式:
视象变换:图形不动,而坐标系变动,即变换前与变换后的图形是针对不同的坐标而言的,也称之为坐标模式
几何变换:另一种是坐标系不动,而图形改变,即变换前与变换后的坐标值是针对同一坐标系而言的,也称之为图形模式变换,
实际应用中后种图形变换更具有实际意义,我们讨论的图形变换主要是属于后一种变换
二、二维图形几何变换的基本原理
1.几何变换
在计算机绘图应用中,经常要实现从一个几何图形到另一个几何图形的变换。例如,将图沿某一方向平移一段距离;将图形旋转一定的角度;或将图形放大;反之把图形缩小等等。这些图形变换的效果虽然各不相同,本质上却都是依照一定的规则,将一个几何图形的点都变为另一个几何图形的确定的点,这种变换过程称为几何变换。
几何变换的规则是可以用函数来表示的。由于一个二维图形可以分解成点、直线、曲线。把曲线离散化,它可以用一串短直线段来逼近;而直线段可以是一系列点的集合,因此点是构成图形的基本几何元素之一。我们先来讨论点的几何变换的函数表示。
二维平面图形的几何变换是指在不改变图形连线次序的情况下,对一个平面点集进行的线性变换。
二维平面图形的轮廓线,不论是由直线段组成(多边形),还是由曲线段组成,都可以用它的轮廓线上顺序排列的平面点集来描述,例如长方形ABCD,是由四个角点A(x1,y1),B(x2,y2),C(x3,y3),D(x4,y4)顺序连接而成,为了使画出的图形是闭合的,首尾两点必须连接。二维平面图形变换的结果有两种,一是使图形产生位置的改变;另一种是使图形产生变形,例如把图形放大。
对二维图形进行几何变形有五种基本变换形式,它们是:平移、旋转、比例、对称和错切。
2.基本几何变换的解析表示
(l)平移变换
平面上一点P(x,y),如果在X轴方向的平移增量为tx,在Y轴方向平移增量为ty时,则平移后所得新点P‘
(x',y')坐标表达式为:
x' = x + tx, y' = y + ty
我们把这一变换称为平移变换。
如果对一图形的每个点都进行上述变换,即可得到该图形的平移变换。实际上,直线的平移变换,可以通过对其定义端点的平移变换来实现,对于其它类型的变换这种处理方法也是可行的。
平移变换只改变图形的位置,不改变图形的大小和形状
(2)比例变换
一个图形中的坐标点(x,y),若在X轴方向有一个比例系数Sx,在Y轴方向有一个比例系数Sy,则该图形的新坐标点(x',y')的表达式为
x' = xSx y' = ySy;
这一变换称为比例变换。
比例变换不仅改变图形的位置,而且改变图形的大小
(3)旋转变换
若图形中的坐标点(x,y)绕坐标原点逆时针旋转一个角度θ ,则该点变换后的新坐标(x‘,y’)与交换前的坐标(x,y)的关系为:
x' = xcosθ - ysinθ
y' = xsinθ + ycosθ
旋转变换只能改变图形的方位,而图形的大小和形状不变,
(4)对称变换
如果经过变换后所得到的图形与变换前的图形关于X坐标轴是对称的,则称此变换为关于X轴的对称变换。经过这一变换后的坐标点(x',y')与变换前的对应坐标点(x,y)的关系为:
x' = x, y' = -y
与此类似,若变换前后的图形关于Y轴对称,则称为关于Y轴的对称变换。这一变换前后点的坐标间的关系:
x' = -x,y' = y
当图形对X轴和Y轴都进行对称变换时,即得相对于原点的中心对称变换。这一变换前后点的坐标之间的关系为:
x' = -x,y' = -y
对称变换只改变图形方位,不改变其形状和大小。
(5)错切变换
如果变换前坐标点(x,y)与变换后对应的新坐标点(x',y')的关系为:
x' = x + cy,y' = y
我们称这一变换为沿X轴的错切变换,式中c为错切系数
与此类似,若变换前后对应点的坐标关系为:
x' = x, y' = y + bx
则称此变换为沿Y轴的错切变换,其中b为错切系数。
错切变换不仅改变图形的形状,而且改变图形的方位,但图形中的平行关系不变,
一般把上述变换统称为基本的图形变换,绝大部分复杂的图形变换都可以通过这些基本交换的适当组合来实现。
3.二维图形几何变换的基本原理
我们知道,在计算机图形中,一个无论多么复杂的平面图形最终都可看成为由一系列直线段组成的,而每一条直线段均由两点所决定,那么,对平面图形进行几何变换,究竟是对图形的每一点变换,还是仅对组成这幅图形的直线段进行几何变换或者只需对直线段的端点进行几何变换呢?
4.6 二维图像裁剪
一、概述
1、定义
为了描述图形对象,我们必须存储它的全部信息,但有时为了达到分区描述或重点描述某一部分的目的,往往将要描述的部分置于一个窗口之内,而将窗口之外的部分“剪掉”,这个处理过程叫做裁剪。
裁剪实质上是从数据集合中抽取信息的过程,这个过程是通过一定计算方法实现的。裁剪就是将指定窗口作为图形边界,从一幅大的画面中抽取所需的具体信息,以显示某一局部画面或视图。
在实际应用中,经常会遇到一些大而复杂的图形,如集成电路布线图、建筑结构图、地形地貌图等。由于显示屏幕的尺寸及其分辨率限制,这样复杂的图形往往不能全部显示出来,即使将它们采用比例变换后全部显示在同一屏幕上,也只能表现一个大致轮廓,并且图形拥挤不清。因此对复杂图形,一般只能显示它的局部内容,我们在研究某复杂图形时,往往对某特定画面感兴趣,在这种情况下,我们将这一特定区域放大后显示出来,而把周围画面部分全部擦除,这样可清晰地观察其细节部分。
我们假定裁剪是针对用户坐标中窗口边界进行的,裁剪完成后,再把窗口内图形映射到视区。所以裁剪的目的是显示可见点和可见部分,删除视区外的部分。例如,下图(a)定义了一个矩形窗口A’B’C’D’,窗口内会有E'F'G'的一部分,而直线段E'G'、F'G'都有一部分在窗口外。然后将落在窗口内这部分图形传送到视图区内显示,如图(b)所示。此时,窗口外那部分被裁剪掉。
二、窗口区和视图区
用户域:在进行图形设计时,图形输出程序中的图形都
是在用户坐标系中定义的。此坐标系拥有的区
域在理论上是无限的,在使用时我们可以把它
当作是一个有限的矩形区,即用户域。
窗口区:用户可以在用户域中指定任意区域输出到屏幕
上,这个指定区域称为窗口区,简称窗口(Window)
如图所示的矩形 ABCD 就是我们定义的一个窗口。我们可用该矩形的左下角和右上角两点坐标来定义其大小和位置。因此,定义窗口的目的就是选取用户所定义的图形中需要观察的那一部分图形。
窗口区,用左下角和右上角来定义
视图区:简称视图(Viewport),是在屏幕上定义的一个小于或等于屏幕区域一个矩形块。同样也是用该矩形左下角和右上角两点坐标来定义大小和位置。视图区可用来显示某一窗口内图形。所以人们利用窗口来选择需要观察那一部分图形,而利用视图区来指定这一部分图形在屏幕上显示位置。下图表示窗口与视图关系。
4.7 反走样技术
一、反走样技术的定义和概述
前面介绍的各种光栅化算法,如非水平亦非垂直的直线或多边形边界进行扫描转换时,或多或少会产生锯齿或阶梯状,如图4.86所示。由于直线和多边形边界的数学描述是连续的,而在光栅显示器中,像素点是占有一定面积是离散的。我们把这种用离散量表示连续量引起的失真称为走样(Aliasing)。走样是数字化发展的必然产物。所谓的反走样(Antialiasing)技术,就是减缓或者消除走样效果的技术。
(a) 原有分辨率 (b) 分辨率放大1倍
光栅图形的走样除了会产生阶梯或者锯齿形状之外,还有可能会造成细节或纹理绘制失真,微小图形的丢失,体现在静态画面中将无法显示,在动态画面中则若隐若现,导致闪烁和跳跃。图4.87说明了这样一个例子,如果认为像素的属性由中心点来决定,那么中在图4.87第一行中,没有覆盖到像素中心点的细微形体就将丢失(用虚线表示);而在4.87第二行中,第一帧和第三帧的小月亮都无法显示,导致观察者看到了闪烁不稳定的动画。
图4.87 细微形体和动画的走样
目前有两类反走样的方法,第一类方法是通过提高采样频率(提高光栅分辨率)来显示图形的细节。例如图4.86中(a)和(b)两幅图形的对比,可以明显发现分辨率提高之后,较好的改善
了图形显示的走样现象,但是锯齿和阶梯状仍然存在。而且提高分辨率的方法将需要硬件和扫描运算时间的支持,实现起来是很困难的。基于此,可以将显示器看成比实际更加细腻的网格,在这种假想的高分辨率上对光栅进行计算,采用某种平均算法得到较低分辨率的像素的属性,并把结果转换到较低分辨率的显示器上进行显示。我们将这种方法称之为超采样(Supersampling)或者后置滤波(有些教材也称为过取样)。
第二类反走样技术是根据图形在每个像素点上的覆盖程度来确定像素点的最终亮度,此时将像素点当成了一个有面积的平面区域而并非一个点,这种方法称之为区域采样(Area Sampling)或者前置滤波。
二、超采样
可以将每个显示像素再细分成n×n个子像素,然后在子像素级进行光栅化,如果某一个像素区域内被激活的子像素有m个,那么该像素点的显示亮度可以近似认为是m/n2。这种方法直观简单,但是有时候需要更加精确的信息。对于一个像素所在的区域,更加精确的显示应该是要考虑到对应于该区域中心的“点”,也即是说,位于区域中心子像素的属性值(颜色、亮度等)应当比位于区域边侧的子像素在整个像素的显示属性中起着更重要的作用,这就涉及到加权平均的方法。图4.88展示了三种不同的加权方法,假设一个像素被划分为3×3的子像素区域,其中带圈的数字表示中心子像素所占的权重。
图4.88 用于加权平均的子像素划分
(1)简单区域采样
前面介绍的各种方法从本质上来说都是把像素的属性值归结于中心的某一点的属
三、区域采样
性,但实际上像素并不是简单的一个点,而是一个有限的区域,屏幕上的直线段也不是数学意义上无宽度的理想直线,而是占有一个或者多个像素单位宽度的线条。如图4.89所示,直线段就好比是狭长的矩形,它和像素点之间有交集,求出相交区域的面积后,根据面积的大小来确定该像素的亮度值,这要求显示器各像素可以用多级灰度显示。
如果求得的相交面积大,那么像素就更深一些,反之像素就应该更浅一些,这种做法将产生模糊的边界,因此可以减缓锯齿效果。图4.89中A像素点区域与直线相交面积较小(假定直线的斜率与直线的精确起点位置是已知的,可以利用求三角形面积的方法求得阴影面积),像素的灰度不如B像素点区域来得深。
对于B像素点区域面积的求法可以利用前面介绍的方法,将B区域继续细分成n×n的网格,算出阴影面积所占有的网格数目m,那么m/n就是其近似的覆盖度。
简单区域采样存在两个缺陷:一是无论上述像素点区域和理想直线的距离如何,各区域相同的面积覆盖率将产生相同的灰度值,这仍然有可能产生锯齿效应;二是沿理想直线方向的相邻两个像素,有时候由于相交面积的差异会产生较大的灰度差,这实际上是不合理的。克服上述两个缺陷的方法是采用加权区域采样。
图4.89 简单区域采样的相交面积
(2)加权区域采样
图4.89所示的简单区域采样是一种使用盒式滤波器进行前置滤波后再采样的方法。盒式滤波器的工作原理如图4.90-(a)所示。图中的正方体代表盒式滤波器,底面为一个像素区域,它是一个二维加权函数w,函数w的定义域为整个平面,在与直线段有交集的每一像素区域上取值为1,其它像素区域则取值为0。直线段经过的某个像素区域,该像素最终显示的灰度值可以通过该区域与直线段相交部分对函数w求积分得到。实质上就是求该相交区域各边垂直向上切割盒式立方体所得子体的体积,由于w取值为1,故积分值就等于相交区域的面积。
九、作业
课后习题
十、本章小结
在本章中,介绍了直线和曲线的生成算法并对其进行了详细的讲解。
第5章 三维图形生成和变换
一、教学目标
通过对本章的学习,要求熟悉自由曲面的生成和三维图形变换。
二、教学要求
1、掌握自由曲面的生成;
2、掌握三维图形的变换和裁剪。
三、教学内容提要
5.1 三维图形的概念
5.2 自由曲面的生成
5.3 三维图形变换
5.4 三维图形剪裁和消隐技术
四、教学重点、难点及解决方法
重点是掌握自由曲面的生成。
五、课时安排
4学时
六、教学设备
课堂教学
七、检测教学目标实现程度的具体措施和要求
通过课堂提问的方式来检测学生对基本概念的掌握程度。
八、教学内容
5.1 三维图形的概念
在计算机图形学中最重要的部分还是三维图形生成与变换,不仅人们对它感兴趣,而且在实际应用中更加广泛。三维图形生成比起二维图形生成要复杂得多,其根本原因在于我们的图形输入设备和输出设备基本上都是二维的,用这些二维的图形设备去表现空间三维实体自然会增加许多复杂性优需要运用许多新的方法去处理三维图形。
正是利用这些曲线网格来近似地表示自由曲面,因此,在产生一张曲面时,我们可以利用一系列的纵横交错且相互平行的样条曲线来构造曲面,如下图所示。
我们如何确定这张曲面上任意一点位置呢?很明显,如果这点恰好落在某一条网格线上,如图A点,那么就可以根据这条网格线函数表示来计算这一点位置(坐标);若这一点不在任何网格线上,如图中的B点,那么就无法计算出该点精确位置,只能用离该点最近一条网格线上的点近似地表示。
这使得本来精度不很高近似曲面在这一点精度更加降低,所以用这种方法来产生曲面只适合于一部分精度要求不太高场合,我们可以把平面里自由曲线生成方法加以推广,借助于曲面的解析表达式来处理有关曲面问题。
曲面的种类繁多,为便于讨论,将曲面分为两类,(1)规则曲面:如柱、锥、椭球、环、双曲面、抛物面等,它可以用参数方程解析地描述。
5.1 三维图形的概念
二、空间曲面的参数表示
在计算机图形学研究中,三维图形概念有几种:
1、是采用线框图构成的三维图形,这是最基本、最简单的,它实际上是在二维屏幕上展示的具有三维视觉效果的图形;
2、三维实体图形,它是采用各种颜色图案、纹理等填充过的图形,在视觉上也具有三维效果;
3、三维立体图形,它借助于光照、浓淡和明暗技术,产生了真正的三维立体效果。
这些三维图形都是我们在计算机图形学中要研究和予以实现的内容。
5.2 自由曲面的生成
5.3 三维图形变换
三维图形的几何变换
1.三维图形平移变换
三维基本几何变换都是相对于坐标原点和坐标轴进行的几何变换
假设三维形体变换前一点为p(x,y,z),变换后为p'(x',y',z')。
2. 比例变换
比例变换的变换矩阵如下:
3.旋转变换
1)绕X的旋转
2)绕Y的旋转
3)绕Z的旋转
4.反射变换
关于xoy平面进行对称变换的矩阵计算形式为
关于yoz平面的对称变换为
关于zox平面的对称变换为:
5.4 三维图形剪裁和消隐技术
三维图形的投影
将三维空间中的物体变为二维图形表示的过程称为投影变换。
投影变换的分类: 投影的要素包括投影对象、投影中心、投影平面、投影线和投影。要作投影变换的物体称为投影对象;在三维空间中,选择一个点,记这个点为投影中心;不经过这个点再定义一个平面,记这个平面为投影平面;从投影中心向投影平面引任意多条射线,记这些射线为投影线;穿过物体的投影线与投影面相交,在投影面上形成物体的像,这个像记为三维物体在二维投影面上的投影。
投影变换可分为两大类:透视投影和平行投影。它们的本质区别在于:透视投影的投影中心到投影面之间的距离是有限的,而平行投影的投影中心到投影面之间的距离是无限的。
1. 平行投影
平行投影的投影中心与投影平面之间的距离为无穷远;投影线之间相互平行;平行线的平行投影仍是平行线。
按照投影方向与投影平面的交角不同,平行投影分为两类:正平行投影和斜平行投影。
1)正平行投影
正平行投影的投影方向垂直于投影平面。
按照投影平面与坐标轴的交角不同,正平行投影又可分为两类:正投影与正轴测。
当投影平面与某一坐标轴垂直时,得到的投影为正投影;否则,得到的投影为正轴测。
(1)正投影
正投影也称为三视图。按照投影平面是否与Y轴、X轴、Z轴垂直,正投影分为主视图、侧视图和俯视图三种,此时投影方向分别与这个坐标轴的方向一致。
(2)正轴测
根据变形系数之间的关系,正轴测投影可分为正等测投影、正二测投影、正三测投影 。
2)斜平行投影
斜平行投影的投影方向不垂直于投影平面,而是与投影面成α夹角。在工程制图中,经常选择一些兼有美观及绘图方便的α 角来作斜平行投影,常用的两种是斜等测和斜二测。
2. 透视投影
1)透视投影的术语和分类
透视投影的投影中心与投影平面之间的距离为有限的。投影线(视线)从投影中心(视点)出发,投影线是不平行的。对于透视投影,一束平行于投影平面的平行线的投影仍可保持平行,而不平行于投影平面的平行线的投影会收敛到一个点,这个点称为灭点(Vanishing Point)。平行于坐标轴的平行线在投影平面上形成的灭点称为主灭点。
根据主灭点的个数,透视投影可分为一点透视、二点透视和三点透视。
(1)一点透视:有一个主灭点,即投影平面与一个坐标轴正交,与另外两个坐标轴平行。
(2)二点透视:有两个主灭点,即投影平面与两个坐标轴相交,与另一个坐标轴平行。
(3)三点透视:有三个主灭点,即投影面与三个坐标轴都相交。
2)透视投影的表示方法
假设投影中心在坐标原点,投影平面与Z轴垂直,在z=d的位置上。点P(x,y,z)在投影平面上的投影点为:P’(x’,y’,d),可构造透视投影的变换矩阵T。
6.3 三维裁减
把二维线段的Cohen-Sutherland裁剪算法稍加改进,就能推广到三维平行投影的裁剪算法中。
对空间任意一点P(x,y,z)按其所处位置赋予6位二进制编码。
(1)两个端点的编码全为“0000”,直接保留;
(2)对两端点的编码进行逻辑与运算,结果不为零,可直接舍弃;
(3)否则,计算出线段与窗口表面的交点,并将线段分段后继续处理,直到余下的线段符合前两种简单情况为止。
九、作业
课后习题
十、本章小结
在本章中,介绍了自由曲面的生成和三维图形的变换。
第6章 真实感图形生成技术
一、教学目标
通过对本章的学习,要求熟悉各种光照模型和明暗处理方法以及阴影生成方法。
二、教学要求
1、掌握简单光照模型;
2、掌握明暗处理方法。
三、教学内容提要
6.l 概述
6.2 简单光照模型
6.3 明暗处理方法
6.4 阴影生成方法
6.5 整体光照模型
6.6 纹理处理方法
四、教学重点、难点及解决方法
重点是掌握简单光照模型的各种方法。
五、课时安排
4学时
六、教学设备
课堂教学
七、检测教学目标实现程度的具体措施和要求
通过课堂提问的方式来检测学生对基本概念的掌握程度。
八、教学内容
九、作业
课后习题
十、本章小结
在本章中,介绍了各种简单光照模型和明暗处理方法。
第8章 计算机动画技术
一、教学目标
通过对本章的学习,要求熟悉计算机动画的概述和分类及原理。
二、教学要求
1、了解动画概述;
2、掌握计算机动画分类和原理。
三、教学内容提要
8.1计算机动画概述
8.2计算机动画的分类和原理
四、教学重点、难点及解决方法
重点是掌握计算机动画的分类和原理。
五、课时安排
2学时
六、教学设备
课堂教学
七、检测教学目标实现程度的具体措施和要求
通过课堂提问的方式来检测学生对基本概念的掌握程度。
八、教学内容
8.2 计算机动画分类和原理
一、计算机动画的分类
1、二维动画(卡通动画)
传统卡通动画先画出两个关键帧,然后在中间插入一系列画,计算机二维动画则借助计算机来完成中间画的自动生成。
一、计算机动画分类
2、三维动画
如果说二维动画对应于传统卡通动画,那么三维动画
画则对应于木偶动画。
木偶动画首先制作木偶、道具和场景,三维动画首先
建立角色、实物和场景三维数据。
三维动画具有很强的真实感和立体感。
一、计算机动画分类
按照动画物体自身物理属性不同,三维动画也可分为:
1、刚体动画
2、软体动画
3、关节动画
4、粒子动画
二、计算机动画原理
1、关键帧动画
通过一组关键帧或关键参数值而得到中间动画帧序列:
(1)形状插值:从关键帧本身而得到中间动画帧;
(2)关键参数插值:通过插值物体模型关键参数数值来
获得中间动画。
1)运动学算法:由运动学方程确定物体运动轨迹和速率。
2)动力学算法:由力学方程确定物体运动形式。
3)反向运动学算法:已知物体末端位置和状态,反求运动方程以确定运动形式。
4)反向动力学算法:已知物体末端位置和状态,反求动力学方程以确定运动形式。
5)随机运动算法:在某些场合下加进运动控制随机因素。
2、算法动画
算法动画由算法实现,一般适用于三维情形。
算法动画是指按照物理或化学等自然规律对运动进行控制的方法、针对不同类型物体的运动方式,从简单的质点运动到复杂的涡流、有机分子碰撞等,一般按物体运动的复杂程度分为质点、刚体、可变软组织、链接物、变化物等类型、也可以按解析式定义物体。
用算法控制运动的过程包括:给定环境描述、环境中的物体造型、运动规律、计算机通过算法生成动画帧。
目前针对刚体和链接物已开发了不少较成熟算法,对软组织和群体运动控制方面也做了不少工作。
2、算法动画
一、旋转的四元数表示
计算机动画中常需对物体或角色进行旋转操作。
三维空间中的旋转可用:
1、旋转矩阵
2、欧拉角
3、四元数(Quaternions)
等数学形式来表示 。
8.3 计算机动画的关键技术
一、旋转的四元数表示
四元数最早由Sir William Rowan Hamilton于1843年提出,从复数推广到四维空间而得,到1985年,Shoemake又把四元数引入到了计算机图形学中来。
四元数旋转表示具有这样的优点:
一、计算简单;
二、朝向插值较稳定而平滑;
三、几何意义明了。
此外,矢量代数,实数、复数和矢量都可以看作是四元数的特例,它们可以在一起统一进行运算。
一个四元数可以表示为:q = a + xi + yj + zk,
其中i、j、k的关系如下:
i2 = j2 = k2 = -1
i * j = k = -j * i
j * k = i = -k * j
k * i = j = -i * k
一、旋转的四元数表示
也可以简化表示为:q=(W,V )= W+V,其中W = a,V = xi + yj + zk(实部W是一个标量,虚部V代表向量,i, j, k 称为虚轴),尽管V称为向量,但不要将其看成是典型的3D向量,它是4D空间的“抽象”向量。
假设有两个四元数:
q1 = a1 + x1 i + y1 j + z1 k
q2 = a2 + x2 i + y2 j + z2 k
四元数的加法定义如下:
q1 + q2 =(W1,V1)+(W2,V2)
=(W1+ W2)+(V1+ V2)
= (a1+a2) + (x1+x2)i + (y1+y2)j
+(z1+z2)k
四元数的乘法定义如下:
q1 * q2 = (W1,V1)*(W2,V2)
= W1*W2 - V1.V2 + V1XV2 + W1*V2 + W2*V1
= (a1*a2 - x1*x2 - y1*y2 - z1*z2)
+ (a1*x2 + x1*a2 + y1*z2 - z1*y2) i
+(a1*y2 - x1*z2 + y1*a2 + z1*x2) j
+ (a1*z2 + x1*y2 - y1*x2 + z1*a2) k
其中V1.V2表示向量内积,V1XV2表示向量外积。
九、作业
课后习题
十、本章小结
在本章中,介绍了delphi的工具栏和状态栏的使用与设计。
第8章 Delphi图形及多媒体应用
一、教学目标
通过对本章的学习,要求熟悉delphi的画布对象、显示图形组件、绘图区域组件、常用图像类、图像组件,并要求掌握与delphi的常用组件结合相应用。
二、教学要求
1、掌握delphi的图形处理;
2、掌握与delphi的常用组件使用的结合;
3、掌握delphi的图像处理。
三、教学内容提要
8.1 绘图组件
8.2 图形列表组件
8.3 图形栅格组件
8.4 图形日历组件
8.5 多媒体组件
四、教学重点、难点及解决方法
重点是了解delphi的图形、图像组件创建和使用,并熟悉与delphi的常用组件的结合使用。
五、课时安排
4学时
六、教学设备
课堂教学
七、检测教学目标实现程度的具体措施和要求
通过课堂提问的方式来检测学生对基本概念的掌握程度。
八、教学内容
九、作业
课后习题
十、本章小结
在本章中,介绍了Delphi的图形及多媒体应用。
第9章 数据库编程
一、教学目标
通过对本章的学习,要求熟悉delphi的数据库操作和编程技术,数据库组件的了解和使用。
二、教学要求
1、掌握delphi的ado组件;
2、掌握与delphi的数据控制组件;
3、掌握delphi的quickreport组件。
三、教学内容提要
9.1 数据库系统概述
9.2 BDE组件
9.3 ADO组件
9.4 数据控制组件简介
四、教学重点、难点及解决方法
重点是了解delphi的各种数据库组件的设计与使用。
五、课时安排
6学时
六、教学设备
课堂教学
七、检测教学目标实现程度的具体措施和要求
通过课堂提问的方式来检测学生对基本概念的掌握程度。
八、教学内容
九、作业
课后习题
十、本章小结
在本章中,介绍了delphi的数据库各种组件。
第10章 报表与图表
一、教学目标
通过对本章的学习,要求熟悉delphi的quickReport组件和Rave组件的设计与使用。
二、教学要求
1、掌握delphi的QuickReport组件;
2、掌握delphi的Rave组件;
三、教学内容提要
10.1 QuickReport组件
10.2 Rave报表设计器的组件
10.3 Delphi中的Rave组件
10.4 图表
四、教学重点、难点及解决方法
重点是了解delphi的报表的设计与使用。
五、课时安排
6学时
六、教学设备
课堂教学
七、检测教学目标实现程度的具体措施和要求
通过课堂提问的方式来检测学生对基本概念的掌握程度。
八、教学内容
九、作业
课后习题
十、本章小结
在本章中,介绍了delphi的报表的设计与实现。
福建农林大学计算机与信息学院课程名称姓名系专业年级学号指导教师职称实验报告计算机图形学洪世玉计算机计算机科学与技术10级10226…
实验1直线的绘制实验目的1通过实验进一步理解和掌握DDA和Bresenham算法2掌握以上算法生成直线段的基本过程3通过编程会在T…
第1章概述一教学目标通过本章的学习使学生能够了解计算机图形学的基本概念研究内容当前的发展概况本门课程的特点和应用二教学要求1了解计…
计算机图形学实验报告河南理工大学测绘学院计算机图形学实验报告学号姓名成绩评语交报告日期20xx年6月25日计算机图形学实验报告实验…
实验报告实验课程:计算机图形学学生姓名:XXXX学号:XXXX专业班级:软件20##年12月25日目录i.实验一矩阵变换ii.实验…
实验报告实验课程:计算机图形学学生姓名:XXX学号:XXX专业班级:计算机科学与技术X班20XX年XX月XX日目录实验一直线和圆的…
北京联合大学应用文理学院实验报告课程名称实验实训名称班级信息与计算科学20xx级姓名学号同组者实验实训日期完成日期本实验实训所用学…
巢湖学院计算机图形学实验报告模板本课程实验包括以下为实验二和实验三模板实验一基本图元绘制一实验目的了解OpenGL图形软件包绘制图…
福建农林大学计算机与信息学院课程名称姓名系专业年级学号指导教师职称实验报告计算机图形学洪世玉计算机计算机科学与技术10级10226…
实验1直线的绘制实验目的1通过实验进一步理解和掌握DDA和Bresenham算法2掌握以上算法生成直线段的基本过程3通过编程会在T…
实验报告实验课程:计算机图形学学生姓名:XXXX学号:XXXX专业班级:软件20##年12月25日目录i.实验一矩阵变换ii.实验…