绘制填入区域 之 ALTERNATE 与 WINDING
2010-11-16 10:57
176 查看
关于WINDING应该没什么的,主要问题集中在ALTERNATE。
ALTERNATE需要进行两个步骤的分析首先画出的多边形,按照定点的先后次序,会产生组成多边形的各条边交叉和不交叉两种情况,在图中,“points1 polygon shape”的图形是由顶点交叉形成的,“points2 polygon shape”的图形是由顶点未交叉形成的。
在未交叉的情形下,ALTERNATE与WINDING绘制出的效果是一样的。
接下去分析,在顶点组成的边交叉情况下绘制出的图形会存在有些区域被黄颜色填充,有些没有填充。
在填充多边形的时候,显示器是逐行扫描将多边形填满的。就是说如果是个矩形,显示器就是从左到右画最上面一行的一根黄线,然后依次画第二行,第三行,直到最下面一行被黄颜色填满。
画多边形的行为和画矩形是一样的,就是每一行画的线段有长有短而已。这个行为就是逐行扫描,而每一行被称为“扫描行”。
当有左边顶点(10,190)画到右边顶点(170,190)时,这根水平线(扫描行)不一定是连续画的,中间可能会断掉。
譬如,当中间会经过其他的边形成一个交叉点时,这跟水平线需要作出判断,从(10,190)开始遇到的第一个交叉点需要进行编号,(10,190)这个点为1号,第一个交叉点为2号,在1号和2号顶点之间的水平线,显示器是画出来的,根据MSDN的说明:
fills area between odd-numbered and even-numbered polygon sides on each scan line
中文意思:在每一条扫描行上填充奇数边和偶数边之间的区域。
说实话,MSDN的解释十分晦涩,我甚至觉得它的解释不精确,如何解释(10,190)这个点?可以硬套它的解释,不过不懂的人根本无法理解(10,190)这个点究竟算奇数边还是偶数边?
因此更容易理解,还是将MSDN上的边理解为点-- 在每一条扫描行上填充奇数点和偶数点之间的线段。
因此,(10,190)这个点编号为1(再次声明下),遇到的第一条交叉边形成的交叉点为2号点,1和2之间的水平线段进行黄色填充,接下去从2号点开始往右扫描,扫描到又一个交叉点,编号为3号,2号和3号之间不填充黄色,也就是MSDN上说的,在奇数边和偶数边之间进行填充,但在偶数边和奇数边之间不填充。
这里再次更正MSDN的说法,应该是从奇数点到偶数点之间进行填充,从偶数点到奇数点之间不填充
-- fill line segment from odd-numbered point to even-numbered point and not fill line segment from even-numbered point to odd-numbered point on each scan line.
ALTERNATE需要进行两个步骤的分析首先画出的多边形,按照定点的先后次序,会产生组成多边形的各条边交叉和不交叉两种情况,在图中,“points1 polygon shape”的图形是由顶点交叉形成的,“points2 polygon shape”的图形是由顶点未交叉形成的。
在未交叉的情形下,ALTERNATE与WINDING绘制出的效果是一样的。
接下去分析,在顶点组成的边交叉情况下绘制出的图形会存在有些区域被黄颜色填充,有些没有填充。
在填充多边形的时候,显示器是逐行扫描将多边形填满的。就是说如果是个矩形,显示器就是从左到右画最上面一行的一根黄线,然后依次画第二行,第三行,直到最下面一行被黄颜色填满。
画多边形的行为和画矩形是一样的,就是每一行画的线段有长有短而已。这个行为就是逐行扫描,而每一行被称为“扫描行”。
当有左边顶点(10,190)画到右边顶点(170,190)时,这根水平线(扫描行)不一定是连续画的,中间可能会断掉。
譬如,当中间会经过其他的边形成一个交叉点时,这跟水平线需要作出判断,从(10,190)开始遇到的第一个交叉点需要进行编号,(10,190)这个点为1号,第一个交叉点为2号,在1号和2号顶点之间的水平线,显示器是画出来的,根据MSDN的说明:
fills area between odd-numbered and even-numbered polygon sides on each scan line
中文意思:在每一条扫描行上填充奇数边和偶数边之间的区域。
说实话,MSDN的解释十分晦涩,我甚至觉得它的解释不精确,如何解释(10,190)这个点?可以硬套它的解释,不过不懂的人根本无法理解(10,190)这个点究竟算奇数边还是偶数边?
因此更容易理解,还是将MSDN上的边理解为点-- 在每一条扫描行上填充奇数点和偶数点之间的线段。
因此,(10,190)这个点编号为1(再次声明下),遇到的第一条交叉边形成的交叉点为2号点,1和2之间的水平线段进行黄色填充,接下去从2号点开始往右扫描,扫描到又一个交叉点,编号为3号,2号和3号之间不填充黄色,也就是MSDN上说的,在奇数边和偶数边之间进行填充,但在偶数边和奇数边之间不填充。
这里再次更正MSDN的说法,应该是从奇数点到偶数点之间进行填充,从偶数点到奇数点之间不填充
-- fill line segment from odd-numbered point to even-numbered point and not fill line segment from even-numbered point to odd-numbered point on each scan line.
相关文章推荐
- 绘制填入区域 之 ALTERNATE 与 WINDING 的解释
- 画线,绘制填入区域
- 第五章 图像基础(绘制填入区域)
- Padding与绘制区域--android:clipToPadding和android:clipChildren
- 目前在学coreText绘制,为什么绘制的区域的背景色是黑色,怎么设置背景色?
- 在指定区域内绘制文本
- 使用Silverlight Toolkit 绘制图表---区域图和冒泡图
- Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整实现(原理:底层SurfaceView+上层绘制ImageView)
- 第26周-window程序设计(基础篇)-第5章(图形基础)-填入空隙和填入区域
- CSS3简明教程-3.1.CSS3背景之 绘制区域background-clip
- [置顶] 【计算机图形学】【加权区域采样】用加权区域采样的方法绘制反走样直线
- windows UI: 即时绘制 窗口某区域 RedrawWindow RDW_UPDATENOW
- MFC画笔\画刷\加载位图\加载外部图片(LoadImage)\调色板\区域绘制、 复杂图像绘制等14.5.6
- Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整实现(原理:底层SurfaceView+上层绘制ImageView)
- 【练习4.3】在图片上画矩形并高亮显示矩形区域、统计矩形区域中像素情况并绘制直方图
- opencv2 使用鼠标绘制矩形并截取和保存矩形区域图像
- JavaScript+html5 canvas绘制渐变区域完整实例
- 详解:多边形填充方式(ALTERNATE和WINDING)的区别
- opencv2 使用鼠标绘制矩形并截取和保存矩形区域图像
- 如何使用图像绘制区域wpf