什么是多边形?
- 多边形是由折线段组成的封闭图形
多边形的表示方法有哪些?
- 顶点表示法:使用顶点进行描述,但此时多边形仅仅是一些封闭线段,内部是空的,且不能直接进行填充上色
- 点阵表示法:使用大量的点进行描述,描述完成之后,得到的就是完整形态的多边形,内部已被填充,可直接针对点来进行上色
多边形的扫描转换就是从顶点表示法转换到点阵表示法的过程。
基础的填充多边形方式:
- 检查光栅上的每一个像素是否位于多边形内
光栅究竟是什么?
- 由大量等宽等间距的平行狭缝构成的光学器件称为光栅,这是专业且准确的方法,然而明显不是给人看的(观众:???)
- 光栅是连接帧缓冲和具体的电脑屏幕的桥梁(这是很老的大头显示器上的,现在的液晶显示器不存在光栅,它的成像依靠的是电场,液晶,滤光膜等,所以我们暂且把这里说的的光栅理解为像素)
光栅化究竟是什么?
- https://blog.youkuaiyun.com/waitforfree/article/details/10066547
- 光栅化是一切屏幕成像的基础,没有它,就没有图像
- 光栅化不依赖于光栅,它依赖于CPU和GPU的交互和运算
有效边表填充算法:
- 基本原理:按照扫描线从小到大的移动顺序,计算当前扫描线与有效边的交点,然后把这些交点按x的值递增顺序进行排序,配对,以确定填充去间,最后用指定颜色填充区间内的所有像素,即完成填充工作
- 优势:通过维护边表和有效边表,避开了扫描线与多边形所有边求交的复杂运算,性能提升巨大
- 边界像素处理原则:对于边界像素,采用“左闭右开”和“下闭上开”的原则
- 有效边:多边形与当前扫描线相交的边
- 有效边表:把有效边按照与扫描线交点x坐标递增的顺序存放在一个链表中,称为有效边表
- 桶表:按照扫描线顺序管理边的数据结构
算法实现:
将VC 6.0 调整到ClassView视图