FXG渲染
FXG渲染模型是对Flash Player 10渲染模型的模拟。FXG同时试图支持Flash Player 9。部分FXG特性依赖Flash Player 10中增加的渲染能力和API,当Flash Player 9时FXG会进行合适的降级。有些情况下,渲染结果正常但性能稍逊,另外一些情况下,为最佳的近似情况。
在实际使用中,真实的实现可能由于环境的限制(例如对颜色种类的支持,或一种将FXG文档映射为当前渲染模型的特定工具或技术),或者数学模型精度的限制(例如为提升性能,曲线被近似为直线),而产生少许的不同。
下面将简要描述一下FXG支持的Flash渲染模型部分。本文意在进行完整的描述,如果存在不清楚的细节问题,可以参考Flash Player的实现。
l 光栅模型
FXG使用一个单独的光栅过程,在屏幕上同时光栅化所有元素。这与传统的打印模型过程有所不同,打印模型将元素依次从后到前顺序显示。在FXG中,光栅处理器扫描每条显示线,并只渲染在输出图像中可见的部分。被遮挡元素(或部分元素)在光栅过程中被忽略。这就造成图形边缘的处理方式与打印模型有微妙的不同,特别是在两个边缘恰好重合的时候。
FXG光栅模式类似于Flash Player的闭-开模型。
l 渲染次序
FXG文档中的元素具有默认深度。处理器根据深度优先的原则通过遍历文档设定深度值,每层叶节点加深一级。元素显示在前面的同层次元素上,而且下级元素显示在上级元素上。
l 组元素的渲染方法
组元素的渲染方法有两种,取决于它们各自的属性
n 转换组元素
缺省情况下,组元素不显示在输出结果中。在标准的组定义中,对组内容进行渲染变换(几何变换,颜色变换和剪切掩模)并不直接作用在组本身。这些变换被FXG处理器直接集成在组中每个叶节点上处理。
n 表层组
特定的组设置(混合模型,滤镜效果等)能够造成隔离显示组内容的效果。该效果等同与生成一个初始为透明黑色的临时画布,并将子元素显示在该画布上。之后,组上指定的滤镜效果被应用在临时画布上。最后,临时画布根据组上的掩模和alpha设置与背景进行集成。所有指定了特殊混合模式或一个/多个滤镜效果的组将被视为表层组处理。
例如,如果一个剪切转换组包含一个表层组,其中进行了模糊滤镜,表层组的内容将首先被模糊处理,然后被剪切。大致的处理过程如下:
u 所有内容变换到文档坐标空间。
u 从表层组节点开始下一级最左侧的叶节点开始渲染,并应用所有中间的剪切路径。
u 下一个结果层与前一个结果层相结合,并应用所有中间的剪切路径。
l 图形元素类型
FXG支持三种基本类型的图形元素,图形元素可以在画布上被渲染显示。
n 图形 为直线或曲线的组合
n 文本 为字符字形的组合
n 光栅图像 为一个数组,数组的数值代表显示在矩形栅格上一系列点的颜色和透明度(术语称为alpha)。
l 显示图形
图形可以被填充(绘制图形内部)以及设置笔画(沿图形的外形进行绘制)。笔画操作以对象的外形为中心,笔画的一半在图形内部,另一半在图形外部。填充和笔画分别具有自己的透明度设置,通过设置不同的透明度值,可以使用半透明的色彩填充图形和/或设置图形笔画。
l 显示笔画
图形笔画的显示有几步操作,笔画的显示在图形填充之上,而在下一个元素之下。因此笔画的显示覆盖填充。例如在下面的例子中,笔画以50%的透明度显示,而红色的填充颜色被显示在下面。
<Rect width="200" height="200">
<fill>
<SolidColor color="#FF0000" />
</fill>
<stroke>
<SolidColorStroke weight="10" color="#0000FF" alpha="0.5" />
</stroke>
</Rect>
一般情况下笔画不受图形所在的用户坐标空间转换的影响。实际上,处理器通常先将路径上的点转换到文档坐标空间,然后应用路径的笔画属性确定笔画的绘制区域。笔画权重的转换取决与文档坐标和上级组元素的用户坐标之间缩放因子。为了确定文档空间重笔画的渲染宽度,处理器首先取得笔画用户空间的x和y缩放因子组成矩阵matrix (sx,sy),然后转换权重w,公式如下:
weight_in_document_space = sqrt(2 * ( (w*sx)^2 + (w*sy)^2))
l FXG支持以下内置的填充类型:
n 纯色
n 渐变色(线性和放射性)
n 位图
l FXG支持以下内置的笔画类型:
n 纯色
n 渐变色(线性和放射性)
l 显示文本
FXG中的文本元素被视为一个用位图填充的矩形路径。文本可以使用纯色渲染,但不支持笔画。位图能够使用任何可继承的颜色变换进行渲染(典型的应用包括为提高渲染效果而直接显示字形,但效果是相同的)。FXG与Flash Player 10渲染模型相似,因此没有对文本的变换方式加以限制。
l 显示光栅图像
当渲染光栅图像时,原有的样本被使用标准算法进行“再取样”,以在输出设备上所需位置创建样本。再取样的需求是在兼容性需求下进行论证的。
l 绘制区域的滤镜处理
FXG允许组元素进行滤镜处理。组元素的滤镜被应用到组成员的渲染结果上。更多内容参考滤镜效果小节。设置了滤镜效果的组被视为表层组处理。
l 剪切,掩模和对象的透明度
在输出设备上,组元素能够通过掩模,将组成员显示在某个子区域内。具体描述见下面的掩模小节。
掩模使用一个单独的组元素定义输出设备上进行绘制的区域。只有落在该区域内的元素被渲染。掩模元素可以被视为一个1位的遮盖处理,被掩模处理元素中处于遮盖部分的像素被忽略,其它的则按原来的方式处理。