计算机图形学第1_4章课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章
导论
1
孔令德.计算机图形学基础教程(Visual C++版)〔M〕.北京:清华大学出版社,2008
孔令德.计算机图形学实践教程(Visual C++版)〔M〕.北京:清华大学出版社,2008
孔令德.计算机图形学基础教程(Visual C++版)习题解答及编程实践〔M〕.北京:清华大学出版社,2010
孔令德.计算机图形学课程设计教程(Visual C++版)〔M〕.北京:北京大学出版社,2010 参考文献
2
计算机图形学的应用领域
计算机图形学的概念
计算机图形学的相关学科
Ivan E.Sutherland对计算机图形学的贡献
光栅扫描显示器工作原理
位面与帧缓冲器
三维图形显示技术
LOD与IBR热点技术
本章学习目标
3
1.1 计算机图形学的应用领域
1.2 计算机图形学的概念
1.3 计算机图形学的相关学科
1.4 计算机图形学的确立与发展
1.5 图形显示器的发展及其工作原理
1.6 图形软件标准的形成
1.7 计算机图形学研究的热点技术
1.8 本章小结
本章内容
4
1.1 计算机图形学的应用领域
“CG”是计算机图形学(Computer Graphics)的缩写。

计算机图形学是计算机技术与电视技术、图形图像处理技术相互融合的结果。

近年来,计算机图形学已经在游戏、电影、科学、艺术、商业、广告、教学、培训和军事等领域获得了广泛的应用。

5
计算机游戏的核心技术来自于计算机图形学,如多分辨率地形、角色动画、天空盒、碰撞检测、粒子系统等。

人们学习计算机图形学的一个潜在目的就是从事游戏开发。

计算机游戏主要包括单机游戏、网络游戏和网页游戏等几种类型。

由Eidos公司推出的《古墓丽影》动作冒险系列游戏,成功地创造了虚拟人物劳拉(Lara Croft)和各种三维场景。

《古墓丽影》凭借巧妙的机关、逼真的动作,美丽的画面赢得了人们的喜爱,开创了三维动作冒险游戏的新纪元。

1.1.1 计算机游戏(Computer Game)
6
古墓丽影游戏截屏图
7
历代劳拉形象对比图
8
9
10
11
计算机辅助设计(Computer Aided Design,CAD)和计算机辅助制造(Computer Aided Manufacture,CAM)是计算机图形学最早应用的领域,也是当前计算机图形学最成熟的应用领域,典型的代表产品为AutoCAD系统软件。

现在建筑、机械、飞机、汽车、轮船、电子器件等产品的开发几乎都使用AutoCAD进行设计。

Autodesk公司出版的另外两个三维建模、动画和渲染软件是3ds max和Maya,前者主要用于建筑物建模,后者主要用于角色建模。

1.1.2 计算机辅助设计(CAD/CAM)
12
具体设计时,先使用线框模型将三维物体内部特征展示出来,然后采用真实光照模型和曲面绘制技术产生最终效果图。

旋耕刀辊设计图
13
博创研究所所长办公室效果图
14
学生宿舍效果图
15
计算机图形学广泛应用于美术设计中,称为计算机艺术(Computer Art,CA),动画设计是其典型代表。

目前,计算机动画已经广泛应用于影视特技、商业广告、游戏、计算机辅助教学等领域。

情景还原。

许多商业广告中还用到变形(Morph)的图形处理方法,可以将一个人的脸变成另一个人的脸。

1.1.3 计算机艺术(CA)
16
邦德与邦德女郎
17
男变女
18
女人是老虎
猫变虎
制作软件Fun Morph
19
源图
目标图
控制点
控制点
三角形网格
三角形网格
20
分形几何学是和计算机图形学相结合的一门边缘学科。

分形通过递归实现复杂的图形结构,主要用于描述欧几里得几何学无法描述的自然世界。

不借助于计算机图形学技术,Menger 海绵和Sierpinski镂垫根本无法用手工绘制出来。

1.1.3 - 分形艺术
Menger海绵
Sierpinski垫片
手机天线
21
Menger海绵
Sierpinski镂垫
22
1.1.4 虚拟现实(VR)
虚拟现实(virtual reality,VR)技术是利用计算机生成虚拟环境,逼真地模拟人在自然环境中的视觉、听觉、运动等行为的人机交互的新技术。

虚拟现实的3I特性包括:沉浸性(Immersion)、交互性(Interactivity)、想象性(Imagination)。

借助于一些特殊设备,如数据手套、头盔显示器、力反馈器等,用户可以“沉浸”到该环境中。

在虚拟现实中,看到的是全彩色的影像,听到的是逼真的音响,感受到的是虚拟环境设备反馈的作用力,从而产生身临其境的感觉。

视景仿真是虚拟现实技术最重要的表现形式,已经在城市规划仿真等许多领域得到广泛的应用。

漫游、产品展示、虚拟教育与训练。

三维扫描仪,数据衣,动作捕捉。

增强现实。

23
家居花园外景
家居花园内景
24
博创研究所漫游
25
1.1.5 计算机辅助教学(CAI)
计算机辅助教学(Computer Aided Instruction)是利用计算机图形学技术展示抽象原理或不可见过程的一种新的教学方法。

在多媒体教室,教师使用集图、文、声、像为一体的多媒体课件,形象、生动地进行教学,有助于学生理解和接受深奥枯燥的理论。

在网络化学习(E-Learning)时代,网络公开课搭建起强有力的网络视频教学平台,使受教育者不必进入传统的课堂也能接受到优质的培训,分享全世界范围内的优质教育资源。

原理展示、内部结
构展示,可视化。

26
CRT教学软件
27
1.2 计算机图形学的概念
计算机图形学是一门研究如何利用计算机表示、生成、显示和处理图形的学科。

简单地说,计算机图形学是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。

图形主要分为两类,一类是基于线条表示的几何图形,如线框图、工程制图、等高线地图等,另一类是基于材质、纹理和光照表示的真实感图形。

线框图
真实感图形
28
图形的表示方法:
参数法
参数法是在设计阶段采用几何方法建立数学模型时,用形状参数和属性参数描述图形的一种方法。

形状参数可以是线段的起始点和终止点等几何参数。

属性参数则包括线段的颜色、线型、宽度等非几何参数。

一般用参数法描述的图形依旧称为图形。

点阵法
点阵法是在实现阶段用具有颜色信息的像素点阵来表示图形的一种方法,描述的图形常称为图像。

计算机图形学就是研究将图形的表示法从参数法转换到点阵法的一门学科。

29
直线的图形
直线的图像
30
计算机图形学的研究内容
图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形的生成算法、科学计算可视化、计算机动画、自然景物仿真和虚拟现实等。

计算机图形学的主要研究目的之一是生成和照片一样逼真的真实感图形。

首先在计算机中构造出物体的几何模型,然后根据假定的光照、材质、纹理等条件,计算可见物体表面的反射光强。

31
1.3计算机图形学的相关学科
数学模型
图像显示
Photoshop
手写板
3ds
32
1.4计算机图形学的确立和发展
1946年2月14日,世界上第一台计算机ENIAC在美国问世。

1950年,美国麻省理工学院的旋风一号计算机配备了世界上第一台显示器——阴极射线管。

1963年美国麻省理工学院的Ivan E.Sutherland完成了《Sketchpad:一个人机通讯的图形系
统》博士学位论文。

1970年Bouknight提出了第一个光反射模型,并用Lambert漫反射余弦定律计算物体表面多边形的光强,对于光照射不到的地方,使用环境光代替。

1971年Gouraud提出了双线性光强插值模型,被称为Gouraud明暗处理。

1975年Phong提出了双线性法矢插值模型,被称为Phong明暗处理。

33
Ivan E.Sutherland 简介
评价:For his pioneering and visionary contributions to computer graphics, starting with Sketchpad, and continuing after 。

34
Ivan E.Sutherland 简介
Ivan Sutherland was born in Hastings, Nebraska, in 1938. He received a B.S. from Carnegie-Mellon University (1959); an M.S. from California Institute of Technology (1960); and a Ph.D. in electrical engineering from Massachusetts Institute of Technology (1963).
Sutherland's Ph.D. dissertation, "Sketchpad: A Man Machine Graphical Communication System," was a groundbreaking interactive computer-aided design system. Its innovations included hierarchical drawings, constraint-satisfaction methods, and an interactive graphical user interface. Sketchpad's graceful interaction and functionality inspire admiration among computer graphics professionals even today, over forty years later.
35
早期的计算机绘图系统只能用键盘输入复杂的代码和命令来描述产品的几何形状。

Sketchpad不必通过键盘输入繁琐的公式或代码,只用光笔等手持物体就可以在电脑屏幕上创建绘出三维几何图像。

Sketchpad极大简化了人与计算机的信息交互,使得人手在屏幕上设计图形成为可能。

Sutherland发明了世界上第一台头盔式显示器,直接把人融入到人脑与计算机生成的三维虚拟世界中。

头盔显示器里用户戴的双目眼镜内的一个小计算机屏幕上放映图像,可以形成透视场景。

这是3D交互和虚拟现实技术的先驱。

1988年图灵奖获得者,美国科学院和工程院两院院士。

36
1.5 图形显示器的发展及其工作原理
CRT(Cathode Ray Tube),是光栅扫描显示器的显示部件,其功能与电视机的显像管类似,主要是由电子枪(electron gun),偏转系统(defiection coils),荫罩(shadow mask),荧光粉层(phosphor)及玻璃外壳(screen)五部分组成。

1.5.1 阴极射线管CRT
37
电子枪
聚焦系统
偏转系统
荧光屏
电子束
荫罩
38
电子枪是由灯丝、阴极、控制栅组成。

彩色CRT中有红绿蓝三支电子枪。

有的显示器的电子枪是单枪三束。

CRT通电后灯丝发热,阴极被激发射出电子,电子受到控制栅的调节形成电子束。

电子束经聚焦系统聚焦后以高速轰击到荧光屏上,荧光粉层被激发后发出辉光形成一个光点。

CRT偏转系统可以控制电子束在指定的位置上轰击荧光屏,整个荧光屏依次扫描完毕后,图像显示完成。

由于荧光粉具有余辉特性——电子束停止轰击荧光屏后,荧光粉的亮度并不是立即消失,而是按指数规律衰减,图像逐渐变暗,为了得到亮度稳定的图像,电子枪需要不断地根据帧缓存的内容轰击荧光屏,反复重绘同一幅图像,即不断刷新屏幕。

39
1.5.2随机扫描显示器
20世纪60年代中期出现随机扫描显示器。

图像的定义是存放在文件存储器中的一组画线命令。

随机扫描显示器周期性地读取画线命令,依次在屏幕上画出线条,当所有的画线命令都执行完毕后,图像就显示出来。

这时随机扫描显示器又返回到第一条命令行进行屏幕刷新。

随机扫描显示器可以直接按指定路径画线,直线光滑没有锯齿,主要用于显示高质量的图像。

随机扫描显示器也称作矢量显示器,属于画线设备,不能显示有阴影的图像。

示波器是随机扫描显示器。

40
随机扫描显示器
41
1.5.3 直视存储管显示器
70年代后期发展了利用CRT本身来存储信息,而且不再需要刷新屏幕的显示器。

DVST使用紧贴在荧光层后的存储栅的电荷分布来存储图形。

DVST使用两支电子枪,一支是写电子枪,用来存储图形;另一支是读电子枪,用来图形显示。

从表面上看DVST极象是一个长余辉的CRT,一条线一旦画在屏幕上,在一小时之内都将是可见的。

42
这种显示器的电子束不是直接打在荧光屏上,而是先用写入电子枪将图像信息以正电荷“写”在一个每英寸有250条细丝的存储栅上。

读电子枪发出的电子流再把存储栅上的图像“重写”在屏幕上。

紧靠着存储栅后面的是收集栅,主要作用是使读出的电子流均匀,并以垂直方向射向屏幕。

读电子枪发出的电子流以低速流经收集栅,并被吸引到存储栅上存有图像信息的正电荷上去,而存储栅上的非正电荷部分则被排斥。

被吸引过去的电子直接通过存储栅并轰击荧光粉形成图像。

43
直视存储管显示器
44
1.5.4 光栅扫描显示器
光栅扫描显示器电子束的强度可以不断变化,所以容易生成颜色连续变化的真实感图像。

光栅扫描显示器是画点设备,可看作是一个点阵单元发生器,并可控制每个点阵单元的亮度,这些点阵单元被称为像素(Picture Element,Pixel)。

像素
45
屏幕纵横比
屏幕纵横比(Aspect Ratio): 显示设备中显示图像的横向尺寸与纵向尺寸的比例,最常见的为4:3,目前的高清晰度电视和一些新型显示设备采用了16:9。

800×600
1024×768
800/600=1024/768=4/3
46
不走样直线
在绘制水平,垂直直线及45°时,像素点集在直线路径上的位置是准确的,直线不走样。

47
走样直线
点阵形成的斜线呈阶梯状,形成锯齿线,这称为走样直线。

反走样直线
游戏中称为抗锯齿。

48
光栅显示器为了在能整个屏幕上显示出图形,电子束需要从屏幕的左上角开始,沿着水平方向从左至右匀速地扫描,一直扫描到屏幕的右下角,显示出一帧图像。

扫描线
扫描线
49
荫罩式显示器
彩色显示器
电子枪
荫罩板
荧光屏
50
荧光点图案
荧光点图案
51
荫罩板
52
如果屏幕上每个像素的颜色只用一位(Bit)表示,其值非0即1,屏幕只能显示黑白二色图像,称为黑白显示器,此时帧缓冲器只有一个位面。

位面与帧缓冲器
二值图像
53
1位面
位面
1位面帧缓冲器
54
8位面
如果每个像素的颜色可以用一个字节(Byte)表示,帧缓冲器需要用八个位面,可表示256种灰度,称为灰度显示器。

灰度图像
55
8位面帧缓冲器
位面
56
24位面
如果每个像素用R、G、B三原色混合表示,其中每种原色分别用一个字节表示,各对应一把电子枪,每种颜色可有256种亮度,三种颜色的组合是224颜色,共有24个位面。

彩色图像
57
24个位面帧缓冲器
58
索引色
为了进一步提高颜色的种类,控制帧缓冲的增加,可把帧缓冲中的位面号作为颜色索引表的索引号,为每组原色配置一个颜色索引表,颜色索引表有256项,每一项具有w位字宽,当w大于8时,如w=10,可以有210种亮度等级,但每次只能有256种不同的亮度等级可用,这种颜色称为索引色。

在本书后续的程序中,将使用COLORREF RGB(BYTE bRed,BYTE bGreen,BYTE bBlue) 宏定义颜色。

59
一个像素的参数为位置坐标(x,y)和颜色值Color。

60
1.5.5 显示器的种类
阴极射线管显示器(Cathode Ray Tube,CRT)
液晶显示器(Liquid Crystal Display,LCD)
CRT LCD
61
加电将光线阻断,不加电则使光线射出。

62
1.5.6 三维立体显示器
1.二维显示器上观看三维图像的方法
(1)坐标变换方法
这是目前光栅扫描显示器显示三维图像的主流技术,通过平行投影或透视投影可以将三维坐标(x,y,z)变换为屏幕坐标(x,y)。

这种三维物体坐标向二维屏幕坐标投影生成的图像称为准三维图像。

斜投影正交投影透视投影
63
(2)三维立体显示方法
立体双图
64
立体摄影方法
65
立体相机
66
立体观屏器
立体观屏器原理
67
立体眼镜方法
68
三维立体画方法
三维立体画生成原理
69
Photo制作的三维立体画
70
“博创图标”三维立体画
71
/
72

山洞
73
请把下图上方的两点作为目标,先使眼睛休息片刻,然后象眺望远方那样,用稍模糊的视线瞄准两点,就会看从两点各自分离出另外两个点,然后调整视线,试图将里面两个点合成一点,当四点变为三点时,你便会看到立体图象。

观看方法
74
立体动画
三维立体画
75
2 三维显示器
不需要佩戴任何3D眼镜就可以观察到具有三维立体效果
76
视差屏障
开关液晶
TFT液晶
立体显示器工作原理
77
1.6 图形软件标准的形成
1974年,美国计算机协会图形学专业委员会召开了一个“与机器无关的图形技术”工作会议,提出了图形软件标准化问题。

ISO批准的第一个图形软件标准软件:图形核心系统(Graphics Kernal System,GKS),它是二维图形软件标准。

1988年,ISO批准的第二个图形软件标准软件:GKS3D。

它是三维图形软件标准。

1986年,ISO又公布了第二个图形软件标准:程序员级的分层结构交互图形系统(Programmer’s Hierarchical Interactive System,PHIGS)。

PHIGS是对GKS的扩充,增加的功能有对象建模、彩色设定、表面绘制和图形管理等。

此后,PHIGS的扩充称为PHIGS+。

进入20世纪90年代以后存在着一些事实上的标准,如SGI公司开发的OpenGL (Open Graphics Library)开放式三维图形标准。

微软公司为PC游戏开发的应用程序接口标准DirectX 等。

78
1.7计算机图形学研究的热点技术
1.LOD (levels of detail)
物体离视点近,则采用就较高细节的模型,物体离视点远,则选择较低细节的模型。

减少资源占用,提高渲染速度。

四叉树地形
均匀网格
LOD网格
特点:需要三维建模
79
2.IBR(Image based Rendering)
从一些预先拍摄好的二维照片出发,生成不同视点处的三维模型。

IBR使用的主要技术是视图插值(view interpolation)。

根据某个场景的几幅静态图像,通过线性插值生成其它角度的图像,可以实现动态漫游时场景的自然过渡。

(a)左视图(b)中视图(c)右视图
中华傅山园山门视图
特点:不需要三维建模
80
本章小结
本章介绍了计算机图形学的应用领域和热点技术,阐述了计算机图形学的基本概念。

计算机图形学是基于图形显示器的发展而发展起来的一门学科。

目前,光栅扫描显示器是使用最为广泛的画点设备,图形的绘制就是根据指定算法将相应的像素设置为指定颜色的过程。

目前计算机图形学的热点技术主要是LOD技术和IBR技术,这两种技术在游戏开发中获得了广泛的应用。

81
习题1
名词解释:点阵法、参数法、图形、图像的含义。

名词解释:光栅、荫罩板、三枪三束、扫描线的含义。

什么是像素,像素的参数有哪些?打开Windows附件中自带的“画图”工具,选择放大镜的比例为8x,选择菜单“查看”→“缩放”→“显示网格”,绘制一条斜线,观察像素级直线的形状。

什么是直线的走样?使用微软中文字处理软件Word中的绘图工具绘制一条直线,该直线已经进行了反走样处理。

将该直线拷贝到Windows附件中自带的“画图”工具中观察,试对比分析走样直线和反走样直线之间的区别?
82
给定顶点是Ai的五边形如图1-47(a)所示,顶点是Bi的五角星如图所示,其中i=0,1,2,3,4。

使用下式可以绘制内插动画
当t从0.0到1.0按步长0.1连续变化时,请编程绘制五边形变化到五角星的动画。

(a)t=0.0 (b)t=0.2 (c)t=0.4
(d)t=0.6 (e)t=0.8 (f)t=1.0
演示
83
下图是一幅笔者制作的三维立体画,里面写有文字。

请把图片上方的两个黑点作为目标,用稍微模糊的视线越过三维画面眺望远方,就会从两个点各自分离出另外两个点成为4个点,调整视线将里面的两个点合并为一个点,也即当4个点变为3个点时,就能看到立体图像。

请问,图片中写有什么文字?
图1-48 三维立体画
84
下图是使用记事本软件制作的一幅“桃心”文本三维立体画。

根据视差原理排列A~P大写英文字母也可以制作出三维立体画,你能看到立体画中的“桃心”么?
文本三维立体画
85
图1-50是一个字符数组,其中的1~9代表不同的深度,“1”代表最大深度,“9”代表最小深度。

使用随机字符绘制三维立体画,结果为一个深邃的四棱台。

86
第二章
第二章
Visual C++绘图基础
1
开发工具的选择
MFC上机操作步骤
MFC基本绘图函数
绘制像素点函数
获取像素点颜色函数
绘制直线段函数
绘制矩形函数
绘制椭圆函数
绘制椭圆弧函数
绘制扇形函数
绘制多边形函数
本章学习目标
路径层函数
绘制Bezier曲线函数
位图操作函数
图形文本函数
双缓冲机制
设备上下文的调用和释放
MFC绘制图形的几种方法
2
2.1 面向对象程序设计基础
2.2 MFC上机操作步骤
2.3 MFC基本绘图函数
2.4 本章小结
本章内容
3
2.1 开发工具的选择
Turbo C:
控制台程序,不支持交互操作。

只能显示16色,不能开发光照和带阴影的程序。

Turbo C 绘制的Menger海绵
4
Visual C++:
可以显示真彩色,有1678万色。

支持交互式绘图。

Visual C++ 绘制的Menger海绵
5
微软基类库MFC(microsoft foundation class library,MFC)是以C++形式封装的Windows API (Application Program Interface),包含了200多个已经定义好的常用基类。

在程序设计过程中,一般是通过MFC调用基类的成员函数来完成设计任务的。

2.2 MFC上机操作步骤
6
7
8
【ClassView】标签页:
☆CTestApp是应用的主函数类,代表了应用程序的主线程。

☆MFC中的数据是存储在CTestDoc类中,而结果则是显示在CTestView类中,即显示在客户区中。

MFC中的文档/视图结构用来将程序的数据本身和数据显示相互隔离,文件读写的操作在文档类的Serialize()函数中进行,图形显示的操作在视图类的OnDraw()函数中进行。

☆CMainFrame类由MainFrame.h和MainFrame.cpp文件组成,CTestApp类由Test.h和Test.cpp 文件组成,框架类,CTestDoc类由TestDoc.h和TestDoc.cpp文件组成,CTestView类由TestView.h 和TestView.cpp文件组成。

9
void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
pDC定义为CDC类的指针。

pDoc通过GetDocument()函数得到了指向文档类CTestDoc的指针。

ASSERT_VALID(pDoc)函数使pDoc指针有效。

使用pDC指针,可以对CDC类的成员函数进行操作。

OnDraw()函数是由系统框架直接调用的,每当窗口重绘时就会自动执行。

OnDraw()函数:
10
点击工具条上的“!”按钮,就可以直接编译、运行程序
尽管未编写一句代码,但Test程序已经形成一个可执行程序框架
!按钮
11
2.3 MFC基本绘图函数
在Windows平台上,应用程序的图形设备接口(Graphics Device Interface,GDI)被抽象化为设备上下文CDC类(Device Content,DC)。

在微软基类库MFC中,CDC类是定义设备上下文对象的基类,封装了绘图所需的所有函数。

当输出文字或图形时,就需要调用CDC 类的成员函数,这些成员函数具备绘制和打印图形的功能。

本节讲解的例程全部在CTestView类的成员函数OnDraw()中实现。

12
2.3.1 CDC类结构和GDI对象
CDC类派生了CClientDC类、CMetaFileDC类、CPaintDC类和CWindowDC类。

CDC类
13
CClientDC类:
显示器客户区设备上下文类。

CClientDC只能在窗口的客户区(不包括边框、标题栏、菜单栏以及状态栏的空白区域)进行绘图。

点(0,0)是客户区的左上角。

构造函数自动调用GetDC()函数,析构函数自动调用ReleaseDC()函数。

14
CMetaFileDC类:
CMetaFileDC类:Windows图元文件设备上下文类。

CMetaFileDC封装了在Windows中绘制图元文件的方法。

图元文件(扩展名为wmf)是微软定义的一种Windows平台下的与设备无关的的图形文件格式,其所占的磁盘空间比其它任何格式的图形文件都要小得多。

wmf格式文件通常用于存储一系列由绘图命令(如绘制直线与文本等)所描述的图形。

在建立图元文件时,不能实现即绘即得,而是先将GDI调用记录在图元文件中,然后在GDI 环境中重新执行图元文件,才可显示图像。

15
16
CPaintDC类:
CPaintDC对象只在响应WM_PAINT消息时使用。

CPaintDC类的构造函数会自动调用BeginPaint()函数。

CPaintDC类的析构函数则会自动调用EndPaint()函数。

MFC程序中使用CPaintDC类在视图窗口中绘图时,需要先添加WM_PAINT消息的映射函数OnPaint(),然后在OnPaint()函数中编写与CPaintDC类相关的代码,而不是编写在OnDraw()中。

请注意,如果使用OnPaint()函数响应了WM_PAINT消息,则OnDraw()函数将会被自动屏蔽。

17
void CTestView::OnDraw(CDC* pDC)//绘制椭圆
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->Ellipse(100,70,900,570);
}
void CTestView::OnPaint() //绘制矩形
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
dc.Rectangle(100,70,900,570);
// Do not call CView::OnPaint() for painting messages
}
OnPaint() 屏蔽了OnDraw()函数,不绘制椭圆。

如果删除此函数,则绘制结果为椭圆。

18
CWindowDC类:
整个屏幕区域的显示器设备上下文类。

包括客户区(工具栏、状态栏和视图窗口的客户区)和非客户区(标题栏和菜单栏)。

CWindowDC允许在整个屏幕区域内进行绘图,其构造函数自动调用GetWindowDC(),析构函数自动调用ReleaseDC()函数。

CWindowDC中点(0,0)在屏幕的左上角,而CClientDC和CPaintDC中点(0,0)是屏幕客户区的左上角。

如果在CTestView类中使用CWindowDC类对象进行绘图,只有在使用GetParent()函数获得CWnd指针后,才能在整个屏幕区域内绘图。

19
20
2. 简单数据类型
简单数据类型
21
CPoint类:存放点坐标(x,y)。

CRect类:存放矩形左上角顶点和右下角顶点的坐标(top,left,right,bottom)
CSize类:存放矩形的宽度和高度的坐标(cx,cy),其中cx为矩形的宽度,cy为矩形的高度。

22
3.绘图工具类
绘图工具类
23
CGdiObject类:GDI绘图工具的基类,一般不能直接使用。

CBitmap:封装了一个GDI位图,提供位图操作的接口。

CBrush类:封装了GDI画刷,可以选作设备上下文的当前画刷。

画刷用于填充图形内部。

CFont:封装了GDI字体,可以选作设备上下文中的当前字体。

CPallette:封装了GDI调色板,提供应用程序和显示器之间的颜色接口。

CPen:封装了GDI画笔,可以选作设备上下文的当前画笔。

画笔用于绘制图形边界线。

24
在选择GDI对象进行绘图时,需要遵循以下步骤:
绘图开始前,创建一个GDI对象,并选入当前设备上下文,同时保存原GDI对象指针。

使用新GDI对象绘图。

绘图结束后,使用已保存的原GDI对象指针将设备上下文恢复原状。

25
把图形显示在屏幕坐标系中的过程称为映射
根据映射模式的不同可以分为
逻辑坐标
设备坐标
逻辑坐标的单位是米制尺度或其它与字体相关的尺度
设备坐标的单位是像素
2.3.2 映射模式
26
映射模式
模式代码坐标单位坐标系特征
MM_TEXT一个像素设备坐标。

屏幕左上角为点,X轴向右,Y轴向下
MM_LOMETRIC0.1mm 逻辑坐标。

坐标原点位置设置,X轴向右,Y轴向
MM_HIMETRIC0.01mm 逻辑坐标。

坐标原点位置设置,X轴向右,Y轴向。

相关文档
最新文档