`
liyiwen007
  • 浏览: 105867 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

[翻译]AGG reference 之 Scanline Containers

 
阅读更多

Introduction

(译注:这篇 reference 好像没有写完,所以下面只是将官方释出的部分进行了翻译)

原文链接:http://www.antigrain.com/doc/scanlines/scanlines.agdoc.html

翻译:唐风

底层的 render 操作的是最简单的数据形式,当然它们本身也很简单。其实 pixel format renderer 并不是 AGG 必须的组成部分,它们是可以替换或是改写的。比如说,如果你有一个功能相似的 API,而且这个 API 带有硬件加速,那么使用这个 API 来代替纯软件的混合渲染(主要是 alpha 混合)会更好。当然,也可以使用 Intel SSE/SSE2 来编写优化过的 renderer。AGG 其它的渲染功能都是基于这些简单的类。
描画去锯齿的对象时我们首先要对它进行光栅化。AGG 中主要的光栅化技术是基于 scanline 的,也就是说,一个多边形会先转换成很多的水平扫描线,然后再逐个描画这些扫描线。同样的, scanline rasterizer 并不是唯一可以用于生成水平扫描线(scanline)的类,你也可以使用一些容器,甚至是你自己的  super-ultra-mega rasterizer 。

在从 rasterizer(光栅化器) 到 scanline renderer 之间的信息转换时,用到了 scanline 容器。一个 scanline 由很多的水平的、不相交的 span 组成。这些 span 按 x 轴排序。这就意味着并没有提供排序这个操作,必须在将 span 添加到 scanline 时就把顺序处理好。如果顺序不是按要求排列的,那么可能会出现未定义的行为。

AGG 中有以下三种 scanline 容器。

  1. scanline_u - 未包装的 scanline 容器。
  2. scanline_p - 包装过的 scanline 容器。
  3. scanline_bin - 原始的,“带锯齿”的 scanline 容器。

前面两种容器可以包含去锯齿信息,第三种不行。

重要信息!
所有的 scanline 容器都为速度进行过优化,但没有考虑内存用量。事实上,它们会为最坏情况申请内存,所以有开销有点大。如果你只是使用少量的 scanline 的话,这不会成为瓶颈,但如果为存储整个形状而使用 scanline 的数组可能不是一个好主意,因为这会使用超出结果图像大小的内存量。

包装的(packed) scanline 与未包装的(unpacked) scanline 的区别在于, unpacked scanline 总是会为所有像素保存覆盖值(coverage value),包括那些全部覆盖在多边形内部的像素。而 packed scanlines 则会把具有相同 coverage value 的像素合并成 solid span。

tmp84

tmp85

看起来好像使用 packed 版的 scanline 总是会好一点,但在实践中并非如此。但你渲染一些大型的实心多边型时,使用 scanline_p 会更快,那是因为多边型的面积比周长要大很多(从像素的角度来衡量)。但是如果是渲染字符的时候绝对应该使用 scanline_u ,这样就能处理更少的 span 了,(scanline_u 会比 scanline_p)大约少产生三倍左右的 span,而 span 数本身就是一项重要的开销。同样的,在大多数 span 产生器中(比如 gradients, Gouraud shader, 以及 image 产生器等),span 的数量更加是(效能的)关键,所以一般也不会使用 scanline_p。

分享到:
评论

相关推荐

    agg-2.5 AGG是一个开源、高效的跨平台2D图形库

    •如果要用AGG的控件和窗体,要加入[AGG]\src\ctrl\*.cpp和[AGG]\src\platform\<OS>\*.cpp,头文件在[AGG]\include\ctrl和[AGG]\include\platform里 •如果要用到TrueType字体显示,要加入[AGG]\font_win32_tt目录下...

    Agg的.NET移植Agg-Sharp.zip

    Agg-Sharp 是 Agg 的 .NET 移植。AGG 是一个开源的二维图形引擎。它提供一套结合了亚像素(subpixel accuracy)技术与反走样(anti-aliasing)技术的图形算法,实现高效率、高质量的二维图形处理功能。AGG 的另一个...

    用AGG实现高质量图形输出.pdf

    1 使用AGG的准备工作 1 2 AGG图形显示原理见下图: 1 3 要理解AGG的工作原理,先看一段代码: 2 4 顶点源(Vertex Source) 5 4.1 头文件 5 4.2 类型 5 4.3 画一条简单的箭头直线(基于此处代码) 6 4.4 自定义一个顶点...

    一个AGG的测试事例

    AGG测试,一个AGG的测试事例。一个GDI和AGG在MFC下使用的例子。

    agg2.5源码+文档

    开源跨平台2d图形库,agg2.5源码+文档

    2d图形开发库agg

    2d图形开发库AGG,跨平台渲染库,C源代码

    AGG图形库资料

    保存&分享AGG图形库相关资料,文档+2.5源码

    Agg学习资料

    包括: 基于AGG算法库的通用图形接口设计.pdf AGG绝好资料.doc 介绍和推荐AGG.doc

    agg二维开发入门例程

    agg二维绘图工具源码及入门例程及安装开发入门

    agg在windows平台编译

    AGG在windows系统visual studio 2013平台编译及开发;已经上传了编译成功的AGG.lib, 使用时将include文件夹添加到链接库即可。

    agg-2.5.zip

    一个很优秀的2D图形引擎. Anti-Grain Geometry (AGG) - Version 2.5 A high quality rendering engine for C++ Copyright (C) 2002-2006 Maxim Shemanarev

    agg-2.5 2D图形库

    agg为开源的高效跨平台2D图形开发库,内部包含了大量的GDI图形绘制源码和示例!

    AGG 官方用户手册

    1,AGG官方用户手册 2,英文原版 3,精心编辑完整索引 4,mnorst出品,必属佳作

    agg_svg_viewer补丁包

    AGG是一个开源的二维图形引擎,它提供了一个功能有限的SVG解析、渲染工具svg_viewer。我对svg_viewer做了如下改进: - 支持解析 、<ellipse> 元素,以及<rect> 的 rx、ry 属性(圆角矩形)。 - 支持格式为 rgb(ddd...

    agg2_lite_agg_

    AGG Lite

    Agg在Windows下的编译 字符集 Unicode

    Agg在Windows下的编译与使用 AGG(Anti-Grain Geometry)是一个开源免费的图形库。 官网地址: www.antigrain.com 环境: Win10 x64 Visual Studio 2013 字符集 Unicode 主要是编译称为Lib库,然后提供给其他程序...

    agg_v2.0.0.apk

    agg_v2.0.0.apk

    agg-2.4-2.1.i386.rpm

    ( agg-2.4-2.1.i386.rpm )

    用AGG实现高质量图形输出.zip

    用AGG实现高质量图形输出.zip,AGG图像引擎介绍

    agg 开源的、高效的2D图形库

    AGG,全名:Anti-Grain Geometry,是一个开源的、高效的2D图形库。AGG的功能与GDI+的功能非常类似,但提供了比GDI+更灵活的编程接口,其产生的图形的质量也非常高,而且它是跨平台的,其宣传可以在非常多的操作系统...

Global site tag (gtag.js) - Google Analytics