一、多边形
x-扫描思想:
1.确定多边形所占有的最大扫描线,得到多边形顶点的最小和最大y值。
2.从y= ymin 和y = ymax,每次用一条扫描线进行填充
3.对一条扫描线填充的过程可分为四个步骤:
a.求交
b.排序
c.交点配对
d.区间填色
交点个数=构成这个顶点的两条边位于扫描线上方的条数
y-向连贯性算法:
1.创建一个链表,存放所有y坐标(节点称为桶)
2.每个节点存放最低y坐标相关的直线
数据结构:
桶表,链表
边缘填充算法(重复访问的点很多)
栅栏填充算法:
按任意顺序处理多边形的每条边(处理每条边与扫描线的交点时,将交点与栅栏之间的像素取补)
边标志算法(先画边界后填色):
1.用一种特殊的颜色在帧缓器中将多边形的边界勾画出来;
2.将着色的像素点依x坐标递增的顺序两两配对;
3.将每一对像素所构成的扫描线区间内的所有像素置为填充色
算法步骤:
1.打标记:将多边形的每条边进行直线扫描转换(将多边形边界所经过的像素打上标记)
2.填充:Inside,初值:假,遇到标记点:取反,真:填充,假:不填充
二、区域填充
区域的定义:
指已经表示成点阵形式的填充图形,它是像素集合
种子填充思想(Photoshop的油漆桶)
以边界表示为例看种子填充思想:
边界填充算法:
算法输入:种子点坐标(x,y),填充色和边界颜色
数据结构:栈结构
算法输出:最佳逼近的像素点集.
4-连通边界填充算法步骤:
种子像素入栈,栈非空时重复执行三步操作:
1.栈顶像素出栈
2.将出栈像素置成填充色
3.检查出栈像素的4-邻接点,若其中某个像素点不是边界色且未置成多边形色,则把该像素入栈
泛填充算法通常用于给区域重新着色
三、必不可少的反走样
1.提高分辨率
2.过取样:重叠过取样
3.区域取样
4.加权区域取样点
探秘造型技术
初识造型技术
图形的构成:体-面-环-边-顶点的层次记录信息
实体的定义:正则形体+二维流形
实体的完整定义:对于一个占据有限空间的正则形体,如果其表面是二维流形,则该正则形体为实体
样条
在绘图术语中,样条是通过一组指定点集而生成平滑曲线的肉韧带.
样条曲线(spine curve)指由多项式曲线端连接而成的曲线,在每段的边界出满足特定的连续性条件
样条曲面:可以使用两组样条曲线进行描述
插值和逼近样条(Photoshop的钢笔):
Bezier曲线和曲面(样条逼近算法)
规则形体
实体模型的三类表示:
1.边界表示(Boundary Representation):比如多边形平面和样条曲面
2.构造实体几何表示(Constructive Solid Geometry):
3.空间分割表示(Space-Partitioning)
不规则形体
1.分形几何
2.粒子系统
裁剪与屏幕映射
编码裁剪算法-Cohen-Sutherland(线段裁剪):
1.直线完全可见
2.直线完全不可见
3.直线与裁剪窗口相交
三维空间的多边形
Sutherland-Hodgeman多边裁剪:将多边形边界作为一个整体,每次用窗口的一条边界对要裁剪的多边形进行裁剪
Weiler-Atherton算法:
屏幕映射
顶点着色器->几何着色器->裁剪->屏幕映射
->模型变换->视图变换->投影变换->屏幕映射
建模坐标系->世界坐标系->观察坐标系->观察坐标系->屏幕坐标系
局部空间->世界空间->观察空间->裁剪空间->屏幕空间