图元的属性
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
y 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 x
x-扫描线算法填充多边形
39
4.6.1 扫描线算法
边的连贯性:某条边与当前扫描线相交,也可能 与下一条扫描线相交; 扫描线的连贯性:当前扫描线与各边的交点顺序 与下一条扫描线与各边的交点顺序 可能相同或类似; 区间连贯性:同一区间上的像素取同一颜色属性
10
4.2 点的属性
颜 色 用RGB值或指向颜色表的索引值设定。 大 小 像素的整数倍。
11
第四章 图元的属性
4.1 4.2 4.3 4.4 4.5 4.6 颜色和查找表 点的属性 线的属性 曲线属性 填充区属性 通用扫描线填充算法
4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样 4.12 OpenGL学习(2)
映射函数 考虑从纹理坐标到曲面上一点的映射。 直观地看,需要如下函数 x=x(s,t) y=y(s,t) z=z(s,t) w=w(s,t)
实际采用的是间接方法。
30
4.5.1 填充模式
逆映射 给定对象上的一个点,我们想知道它对应 于纹理中的哪个点。 此时需要如下形式的映射 s = s(x,y,z,w) t = t(x,y,z,w)
Opengl线形设置 glLineStipple(1,0x00FF);
22
第四章 图元的属性
4.1 4.2 4.3 4.4 4.5 4.6 颜色和查找表 点的属性 线的属性 曲线属性 填充区属性 通用扫描线填充算法
4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样 4.12 OpenGL学习(2)
表项可随时改变,容易试验在设计、场景或图形中使用不同的颜 色组合,而无需改变对图形数据结构的属性设置。
视频操作速度快,因为每个像素在帧缓冲区中占有更少的数据位
Disadvantages
能同时使用颜色数有限
8
4.1 颜色和查找表
4.1.3 灰度 当RGB函数中指定相同量的红色、绿色和蓝色时,结 果是某种程度的灰色。
3
4.1 颜色和查找表
4.1.1 RGB颜色分量
在彩色光栅系统中,可选用的颜色数量依赖于帧缓存 中提供的存储容量。颜色信息有两种存储方法: 直接存储RGB编码。 存储颜色码。
4.1.2 颜色表
M-1
0 0 11 0
红 绿 255 兰
100100101010010101 100100 101010 010101
12
4.3
线宽
重复像素法
优点:
实现简单
线的属性
用重复像素法绘制线段
用重复像素法绘制圆弧
13
4.3
线宽
缺点:
线的属性
线段两端要么为水平的,要么是竖直的。 折线顶点处有缺口
14
4.3
线宽
图元的宽度不均匀
线的属性
(a)水平线段
(b)45°线段
产生宽度为偶数像素的图元效果不好
36
第四章 图元的属性
4.1 4.2 4.3 4.4 4.5 4.6 颜色和查找表 点的属性 线的属性 曲线属性 填充区属性 通用扫描线填充算法
4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样 4.12 OpenGL学习(2)
typedef struct {int ymax; float x,deltax; Edge *nextEdge; }Edge;
AEL 的结点信息: Ymax: 所交边的最高扫描线号 X:当前扫描线与边的交点的x坐标 △X:边的斜率的倒数 Nextage: 下一条边的指针
49
4.6.2 有序边表算法
15
4.3
区域填充
可以根据线条的宽度, 计算出线条的外轮廓,再 用区域填充的方法,产生 具有一定线宽 的线条。 优点
- 生成的图形质量高
线的属性
缺点
计算量大 有些图形的等距线难以获得
16
4.3
画笔和画刷
线的属性
17
4.3
画笔和画刷
线的属性
用移动画笔法绘制线段
18
4.3
画笔和画刷
32
31
4.5.1 填充模式
假设要计算中心在(xs, ys)的一个矩形像素的颜色。 中心点对应于对象上的点(x,y,z) 。 如果对象是弯曲的,那么矩形像素的原像是一个曲 边四边形。 这个曲边四边形在纹理上的原像才是对当前矩形像 素的颜色有贡献的纹理元素。
32
4.5.1 填充模式
最终转化为:纹理坐标到屏幕坐标的映射 xs=xs(s,t) ys=ys(s,t) (xs,ys)表示屏幕颜色缓存中的某个位置。
4.1.4 其他颜色参数 CMY和CMYK模型针对彩色打印机。 HSI彩色模型更符合人描述和解释颜色的方式。
9
第四章 图元的属性
4.1 4.2 4.3 4.4 4.5 4.6 颜色和查找表 点的属性 线的属性 曲线属性 填充区属性 通用扫描线填充算法
4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样 4.12 OpenGL学习(2)
第四章 图元的属性
任何影响图元显示方式的参数一般称为属性参数。 将属性选择加入图形软件包的方法: 为每个输出图元功能扩充相关的参数。 提供一张系统的当前属性值表。 维护属性和其他参数当前值表的图形系统称为状态系统。
1
第四章 图元的属性
4.1 4.2 4.3 4.4 4.5 4.6 颜色和查找表 点的属性 线的属性 曲线属性 填充区属性 通用扫描线填充算法
交点的取整规则
要求:使生成的像素全部位于多边形之内 ! 用于线画图元生成的四舍五入原则导致部分像素位于 多边形之外,从而不可用 假定非水平边与扫描线y=e 相交,交点的横坐标为x,
46
4.6.2 有序边表算法
规则1
X为小数,即交点落于扫描线上两个相邻像素之间
(a)交点位于左边,向右取整 (b)交点位于右边,向左取整
23
4.5 填充区属性
4.5.1 填充模式
4.5.2 颜色调和填充区域
24
4.5.1 填充模式
填充方法
均匀着色方法:将图元内部像素置成同一颜色 位图不透明:若像素对应的位图单元为1,则以 前景色显示该像素;若为0,则以背景色显示该 像素; 位图透明:若像素对应的位图单元为1,则以前 景色显示该像素;若为0,则不做任何处理。 像素图填充:以像素对应的像素图单元的颜色 值显示该像素。
y
0
0 1
67
像素值 0 0 x 帧缓冲器 ¢ N-1
67
0
被显示 的像素
R
G
B
查找表
Βιβλιοθήκη Baidu显示器
4
直接存储
Idea: 帧缓冲 区像素信息直 接控制RGB三 枪强度(直接 存储策略)
5
Color Lookup Tables
Idea:存 储在颜色 查找表中 的信息控 制RGB三 枪
6
直接存储
Advantages
37
4.6 通用扫描线填充算法
4.6.1 扫描线算法 4.6.2 有序边表算法 4.6.3 边填充算法
4.6.4 边标志算法
38
扫描线算法思想
扫描线自底向上扫 描,计算扫描线与 多边形边界的交点 确定填充区间,再 用要求的颜色显示 这些区间的像素, 即完成填充工作。 一条扫描线的填充 过程分为求交、排 序、配对和填色四 个步骤。
2)边的分类表(ET)
按照边的下端点y坐标对非水平边进行分类的指针数组, 下端点y坐标值等于i的边属于第i类。 typedef struct {int ymax; float x,deltax; Edge *nextEdge; }Edge; 边的分类表的作用是避免盲目求交。 当处理一条扫描线时,为了求出它与多 边形边的所有交点,必须将它与所有的 边进行求交测试。而实际上只有某几条 边与该扫描线有交点。边的分类表正是 用来排除不必要的求求交测试的。
27
4.5.1 填充模式
把图像映射到曲面上是一个非常复杂的任务。
28
4.5.1 填充模式
涉及到的坐标系
参数坐标系可以用来建立曲线、曲面。
纹理坐标系用来识别要被映射的图像上的点。 世界坐标系从概念上说,就是映射发生的地方。 屏幕坐标系最终图像生成的地方。
29
4.5.1 填充模式
43
4.6 通用扫描线填充算法
4.6.1 扫描线算法 4.6.2 有序边表算法 4.6.3 边填充算法
4.6.4 边标志算法
44
4.6.2 有序边表算法
基本原理
一条扫描线与多边形的边有偶数个交点
步骤(对于每一条扫描线):
求交点 交点排序 交点配对,填充区段
45
4.6.2 有序边表算法
40
4.6.1 扫描线算法
扫描线算法
目标:利用相邻像素之间的连贯性,提高算法效率 处理对象:非自交多边形 (边与边之间除了顶点外 无其它交点)
41
算法技巧1 – 扫描线与边的顶点
B I
A
H C E
扫描线y1 扫描线y2 扫描线y3
D
G
F
42
算法技巧2 – 水平边
不计算水平边和扫 描线的交点
25
4.5.1 填充模式
基本问题: 建立区域与图像间的对应关系
- 建立整个绘图空间与图像空间的1-1映射 - 建立区域局部坐标空间与图像空间的1-1映射
26
4.5.1 填充模式
以数组形式存储在处理器内存里的二维图像称为纹理。 此时数组元素称为纹素(texel),可以由应用程序生成,
也可以将照片扫描输入。 把离散数组看成一个连续的二维矩形区域纹理图案 T(s,t),独立变量s和t是纹理坐标一般把纹理坐标缩放到 [0,1]区间。
47
4.6.2 有序边表算法
规则2
边界上象素的取舍问题,避免填充扩大化。 解决方法: 边界象素:规定落在右边界的象素不予 填充。具体实现时,只要对扫描线与多边形 的相交区间左闭右开。
48
4.6.2 有序边表算法
算法所涉及的数据结构:
1)活化边表:与当前扫描线相交的边。按交点x的增量顺
序存放在一个链表中;该链表称作活化边表(AEL)。
特别灵活 – 可同时使用颜色范围的任一颜色 硬件简单
Disadvantages
帧缓冲区存储容量需求大 视频操作速度慢(例如24位色光栅系统,改变一个像素 需要操作3个字节)
7
Color Lookup Tables
Advantages
使用彩色表可提供合理的同时显示的颜色数量,而无需大容量帧 缓冲器。 256或512种不同颜色足以显示单个图像。
4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样 4.12 OpenGL学习(2)
2
4.1 颜色和查找表
颜色是所有图元的一个基 本属性.用户可以选择多种颜 色,依赖于特定系统的能力和 设计目标.颜色可用数值指定 ,也可以从菜单或显示的标尺 中选择.
33
4.5.1 填充模式
研究方向: 纹理合成
34
4.5 填充区属性
4.5.1 填充模式 4.5.2 颜色调和填充区域
35
4.5.2 颜色调和填充区域
线性软填充(调和颜色填充):
将前景色F与背景色B(F<>B)合并后绘制的区域上重新绘制。 假如F和B的值为已知,那么通过检测帧缓冲器中当前的颜色 内容,就可确定这些颜色原来是怎样组合的。区域内将要重 新填充每个像素的当前颜色P,则是F和B的线性组合: P=aF十(1-a)B
线的属性
用移动画笔法绘制圆弧
19
4.3
画笔和画刷
线的属性
(a)水平线段 (b)45°线段
20
4.3
线型
线的属性
实线 长划线 短划线 点划线
四种常用的线型
21
4.3
线型
线的属性
线型可以用0、1序列来表示,存放在数组中。 例如,我们可以用包含8个元素的整数数组来表示 线型(11111111表示实线,11110000表示长划线, 11001100表示短划线),此时线型以8为周期重复。 111100111100111100
x-扫描线算法填充多边形
39
4.6.1 扫描线算法
边的连贯性:某条边与当前扫描线相交,也可能 与下一条扫描线相交; 扫描线的连贯性:当前扫描线与各边的交点顺序 与下一条扫描线与各边的交点顺序 可能相同或类似; 区间连贯性:同一区间上的像素取同一颜色属性
10
4.2 点的属性
颜 色 用RGB值或指向颜色表的索引值设定。 大 小 像素的整数倍。
11
第四章 图元的属性
4.1 4.2 4.3 4.4 4.5 4.6 颜色和查找表 点的属性 线的属性 曲线属性 填充区属性 通用扫描线填充算法
4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样 4.12 OpenGL学习(2)
映射函数 考虑从纹理坐标到曲面上一点的映射。 直观地看,需要如下函数 x=x(s,t) y=y(s,t) z=z(s,t) w=w(s,t)
实际采用的是间接方法。
30
4.5.1 填充模式
逆映射 给定对象上的一个点,我们想知道它对应 于纹理中的哪个点。 此时需要如下形式的映射 s = s(x,y,z,w) t = t(x,y,z,w)
Opengl线形设置 glLineStipple(1,0x00FF);
22
第四章 图元的属性
4.1 4.2 4.3 4.4 4.5 4.6 颜色和查找表 点的属性 线的属性 曲线属性 填充区属性 通用扫描线填充算法
4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样 4.12 OpenGL学习(2)
表项可随时改变,容易试验在设计、场景或图形中使用不同的颜 色组合,而无需改变对图形数据结构的属性设置。
视频操作速度快,因为每个像素在帧缓冲区中占有更少的数据位
Disadvantages
能同时使用颜色数有限
8
4.1 颜色和查找表
4.1.3 灰度 当RGB函数中指定相同量的红色、绿色和蓝色时,结 果是某种程度的灰色。
3
4.1 颜色和查找表
4.1.1 RGB颜色分量
在彩色光栅系统中,可选用的颜色数量依赖于帧缓存 中提供的存储容量。颜色信息有两种存储方法: 直接存储RGB编码。 存储颜色码。
4.1.2 颜色表
M-1
0 0 11 0
红 绿 255 兰
100100101010010101 100100 101010 010101
12
4.3
线宽
重复像素法
优点:
实现简单
线的属性
用重复像素法绘制线段
用重复像素法绘制圆弧
13
4.3
线宽
缺点:
线的属性
线段两端要么为水平的,要么是竖直的。 折线顶点处有缺口
14
4.3
线宽
图元的宽度不均匀
线的属性
(a)水平线段
(b)45°线段
产生宽度为偶数像素的图元效果不好
36
第四章 图元的属性
4.1 4.2 4.3 4.4 4.5 4.6 颜色和查找表 点的属性 线的属性 曲线属性 填充区属性 通用扫描线填充算法
4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样 4.12 OpenGL学习(2)
typedef struct {int ymax; float x,deltax; Edge *nextEdge; }Edge;
AEL 的结点信息: Ymax: 所交边的最高扫描线号 X:当前扫描线与边的交点的x坐标 △X:边的斜率的倒数 Nextage: 下一条边的指针
49
4.6.2 有序边表算法
15
4.3
区域填充
可以根据线条的宽度, 计算出线条的外轮廓,再 用区域填充的方法,产生 具有一定线宽 的线条。 优点
- 生成的图形质量高
线的属性
缺点
计算量大 有些图形的等距线难以获得
16
4.3
画笔和画刷
线的属性
17
4.3
画笔和画刷
线的属性
用移动画笔法绘制线段
18
4.3
画笔和画刷
32
31
4.5.1 填充模式
假设要计算中心在(xs, ys)的一个矩形像素的颜色。 中心点对应于对象上的点(x,y,z) 。 如果对象是弯曲的,那么矩形像素的原像是一个曲 边四边形。 这个曲边四边形在纹理上的原像才是对当前矩形像 素的颜色有贡献的纹理元素。
32
4.5.1 填充模式
最终转化为:纹理坐标到屏幕坐标的映射 xs=xs(s,t) ys=ys(s,t) (xs,ys)表示屏幕颜色缓存中的某个位置。
4.1.4 其他颜色参数 CMY和CMYK模型针对彩色打印机。 HSI彩色模型更符合人描述和解释颜色的方式。
9
第四章 图元的属性
4.1 4.2 4.3 4.4 4.5 4.6 颜色和查找表 点的属性 线的属性 曲线属性 填充区属性 通用扫描线填充算法
4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样 4.12 OpenGL学习(2)
第四章 图元的属性
任何影响图元显示方式的参数一般称为属性参数。 将属性选择加入图形软件包的方法: 为每个输出图元功能扩充相关的参数。 提供一张系统的当前属性值表。 维护属性和其他参数当前值表的图形系统称为状态系统。
1
第四章 图元的属性
4.1 4.2 4.3 4.4 4.5 4.6 颜色和查找表 点的属性 线的属性 曲线属性 填充区属性 通用扫描线填充算法
交点的取整规则
要求:使生成的像素全部位于多边形之内 ! 用于线画图元生成的四舍五入原则导致部分像素位于 多边形之外,从而不可用 假定非水平边与扫描线y=e 相交,交点的横坐标为x,
46
4.6.2 有序边表算法
规则1
X为小数,即交点落于扫描线上两个相邻像素之间
(a)交点位于左边,向右取整 (b)交点位于右边,向左取整
23
4.5 填充区属性
4.5.1 填充模式
4.5.2 颜色调和填充区域
24
4.5.1 填充模式
填充方法
均匀着色方法:将图元内部像素置成同一颜色 位图不透明:若像素对应的位图单元为1,则以 前景色显示该像素;若为0,则以背景色显示该 像素; 位图透明:若像素对应的位图单元为1,则以前 景色显示该像素;若为0,则不做任何处理。 像素图填充:以像素对应的像素图单元的颜色 值显示该像素。
y
0
0 1
67
像素值 0 0 x 帧缓冲器 ¢ N-1
67
0
被显示 的像素
R
G
B
查找表
Βιβλιοθήκη Baidu显示器
4
直接存储
Idea: 帧缓冲 区像素信息直 接控制RGB三 枪强度(直接 存储策略)
5
Color Lookup Tables
Idea:存 储在颜色 查找表中 的信息控 制RGB三 枪
6
直接存储
Advantages
37
4.6 通用扫描线填充算法
4.6.1 扫描线算法 4.6.2 有序边表算法 4.6.3 边填充算法
4.6.4 边标志算法
38
扫描线算法思想
扫描线自底向上扫 描,计算扫描线与 多边形边界的交点 确定填充区间,再 用要求的颜色显示 这些区间的像素, 即完成填充工作。 一条扫描线的填充 过程分为求交、排 序、配对和填色四 个步骤。
2)边的分类表(ET)
按照边的下端点y坐标对非水平边进行分类的指针数组, 下端点y坐标值等于i的边属于第i类。 typedef struct {int ymax; float x,deltax; Edge *nextEdge; }Edge; 边的分类表的作用是避免盲目求交。 当处理一条扫描线时,为了求出它与多 边形边的所有交点,必须将它与所有的 边进行求交测试。而实际上只有某几条 边与该扫描线有交点。边的分类表正是 用来排除不必要的求求交测试的。
27
4.5.1 填充模式
把图像映射到曲面上是一个非常复杂的任务。
28
4.5.1 填充模式
涉及到的坐标系
参数坐标系可以用来建立曲线、曲面。
纹理坐标系用来识别要被映射的图像上的点。 世界坐标系从概念上说,就是映射发生的地方。 屏幕坐标系最终图像生成的地方。
29
4.5.1 填充模式
43
4.6 通用扫描线填充算法
4.6.1 扫描线算法 4.6.2 有序边表算法 4.6.3 边填充算法
4.6.4 边标志算法
44
4.6.2 有序边表算法
基本原理
一条扫描线与多边形的边有偶数个交点
步骤(对于每一条扫描线):
求交点 交点排序 交点配对,填充区段
45
4.6.2 有序边表算法
40
4.6.1 扫描线算法
扫描线算法
目标:利用相邻像素之间的连贯性,提高算法效率 处理对象:非自交多边形 (边与边之间除了顶点外 无其它交点)
41
算法技巧1 – 扫描线与边的顶点
B I
A
H C E
扫描线y1 扫描线y2 扫描线y3
D
G
F
42
算法技巧2 – 水平边
不计算水平边和扫 描线的交点
25
4.5.1 填充模式
基本问题: 建立区域与图像间的对应关系
- 建立整个绘图空间与图像空间的1-1映射 - 建立区域局部坐标空间与图像空间的1-1映射
26
4.5.1 填充模式
以数组形式存储在处理器内存里的二维图像称为纹理。 此时数组元素称为纹素(texel),可以由应用程序生成,
也可以将照片扫描输入。 把离散数组看成一个连续的二维矩形区域纹理图案 T(s,t),独立变量s和t是纹理坐标一般把纹理坐标缩放到 [0,1]区间。
47
4.6.2 有序边表算法
规则2
边界上象素的取舍问题,避免填充扩大化。 解决方法: 边界象素:规定落在右边界的象素不予 填充。具体实现时,只要对扫描线与多边形 的相交区间左闭右开。
48
4.6.2 有序边表算法
算法所涉及的数据结构:
1)活化边表:与当前扫描线相交的边。按交点x的增量顺
序存放在一个链表中;该链表称作活化边表(AEL)。
特别灵活 – 可同时使用颜色范围的任一颜色 硬件简单
Disadvantages
帧缓冲区存储容量需求大 视频操作速度慢(例如24位色光栅系统,改变一个像素 需要操作3个字节)
7
Color Lookup Tables
Advantages
使用彩色表可提供合理的同时显示的颜色数量,而无需大容量帧 缓冲器。 256或512种不同颜色足以显示单个图像。
4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样 4.12 OpenGL学习(2)
2
4.1 颜色和查找表
颜色是所有图元的一个基 本属性.用户可以选择多种颜 色,依赖于特定系统的能力和 设计目标.颜色可用数值指定 ,也可以从菜单或显示的标尺 中选择.
33
4.5.1 填充模式
研究方向: 纹理合成
34
4.5 填充区属性
4.5.1 填充模式 4.5.2 颜色调和填充区域
35
4.5.2 颜色调和填充区域
线性软填充(调和颜色填充):
将前景色F与背景色B(F<>B)合并后绘制的区域上重新绘制。 假如F和B的值为已知,那么通过检测帧缓冲器中当前的颜色 内容,就可确定这些颜色原来是怎样组合的。区域内将要重 新填充每个像素的当前颜色P,则是F和B的线性组合: P=aF十(1-a)B
线的属性
用移动画笔法绘制圆弧
19
4.3
画笔和画刷
线的属性
(a)水平线段 (b)45°线段
20
4.3
线型
线的属性
实线 长划线 短划线 点划线
四种常用的线型
21
4.3
线型
线的属性
线型可以用0、1序列来表示,存放在数组中。 例如,我们可以用包含8个元素的整数数组来表示 线型(11111111表示实线,11110000表示长划线, 11001100表示短划线),此时线型以8为周期重复。 111100111100111100