简要评说Adobe的FlashPlayer的渲染算法--续1

在扫描线算法(ScanLine)中,其核心是通过计算扫描线和各边的交点,并通过特定的法则填充两个交点来完成一条扫描线的绘制,及我们可以抽象的理解在2D矢量图形引擎中,所有的Object / Shape,甚至一点简单的直线(直线因为具有端点-----不同的笔触)都可以理解为多边形的填充,所以为什么我们称之为填充法则(Fill Rule);

传统的2D矢量图形引擎(OpenVG / GingkoVG)中支持两种填充法则:奇偶填充法则、非零填充法则:

l  奇偶填充法则(Even/Odd Fill Rule):奇偶填充法则的核心算法是通过确认扫描线和各边相交的次数 ----- 是奇数还是偶数决定是否填充;通常情况下,在扫描线与边相交次数为奇数开始填充,偶数结束填充;在奇偶填充法则中,各边是没有方向性的;

l  非零填充法则(Non-Zero Fill Rule):非零填充法则的核心算法是根据扫描线与有向边相交的数值决定是否填充,及假定向上的边为正向边,向下的边为负向边,扫描线与正向边相交及加1,与负向边相交及减1,根据这个数值我们决定是否填充:如果该值为非零的值及开始填充,为零则结束填充;

l  对于边边填充法则(Edge-Edge fil Rule):我们可以简单理解为具有两个不同着色算法的奇偶填充法则;

因此,如下针对两种不同的填充法则,以下图形应该很好理解:

 

figure-a-1

FlashPlayer中允许在一个Shape的不同边具有不同的着色方式 ---- 一个通常很容易使人困惑的地方;

阅读更多
版权声明:本文为博主原创文章,水平有限,欢迎转载,但务必注明原始出处 https://blog.csdn.net/tomsoft/article/details/6559860
个人分类: UI设计
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭