`
liyiwen007
  • 浏览: 107701 次
  • 性别: 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实现高质量图形输出.pdf

    扫描线光栅化器是AGG中的核心组件之一,负责将图形数据转化为一组水平扫描线。 - **扫描线** (`Scanline`):表示图像中的每一行像素。 - **头文件**:`agg_scanline_u.h` - **类型**:`agg::scanline_u8` - **...

    agg学习手册

    ### AGG学习手册知识点解析 #### 一、AGG简介 **AGG**(Anti-Grain Geometry)是一个开源的2D图形库,以其高效、跨平台的特点而著称。相较于GDI+(Graphics Device Interface Plus),AGG不仅提供了更为灵活的编程...

    AGG图形库资料

    AGG(Anti-Grain Geometry)是一个开源的2D图形渲染引擎,主要设计用于高性能的图形绘制和处理。这个图形库是由Evgeny Panasenkov开发,它以C++编写,提供了高度优化的算法来处理图形操作,如线条绘制、曲线绘制、...

    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目录下...

    agg2.5源码+文档

    "agg2.5源码+文档" 是一个开源项目,主要提供了一个强大的、跨平台的2D图形库。这个库的名称"agg"是“Anti-Grain Geometry”的缩写,它是一个高度优化的C++库,专为高质量的矢量图形渲染而设计。这个库的版本号2.5...

    agg-2.5 2D图形库

    在计算机图形学中,抗锯齿处理是提高图像质量的关键技术之一。agg库采用先进的算法,提供平滑的边缘渲染,即使在高分辨率下也能保持良好的视觉效果,有效减少像素化的现象,使得线条和曲线看起来更加自然流畅。 **2...

    agg在windows平台编译

    AGG(Anti-Grain Geometry)是一个开源的2D图形渲染引擎,主要用于生成高质量的矢量图形。在Windows平台上,如果你需要使用AGG库进行图形处理或开发项目,你可能会遇到如何在Visual Studio 2013环境下编译和集成AGG...

    agg二维开发入门例程

    AGG(Anti-Grain Geometry)是一个开源的二维图形绘制库,主要由C++编写,设计目标是提供高质量、高性能的2D图形渲染。在"agg二维开发入门例程"中,你将学习如何利用AGG进行图形绘制,以及如何进行开发工作。这个...

    一个AGG的测试事例

    AGG(Anti-Grain Geometry)是一个开源的2D图形渲染引擎,主要设计用于高性能的图形绘制和处理。它提供了一套高效的算法和数据结构,用于实现高质量的矢量图形和位图图形操作。在MFC(Microsoft Foundation Classes...

    Agg的.NET移植Agg-Sharp.zip

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

    Agg学习资料

    Agg(Anti-Grain Geometry)是一个开源的2D图形渲染引擎,主要由Alexander Romanov开发,用于创建高质量的矢量图形。这个库提供了一种高效且灵活的方式来处理图形,适用于各种应用程序,如图像处理软件、游戏开发、...

    2d图形开发库agg

    AGG,全称为“Anti-Grain Geometry”,是一款高级的2D图形开发库,专注于高质量的矢量图形渲染。这个库是由Evgeny Panasenkov创建,它以C++语言编写,提供纯C源代码,确保了跨平台的兼容性。AGG的设计目标是实现高...

    AGG是一个开源、高效的跨平台2D图形库 这是它的离线文档

    AGG(Anti-Grain Geometry)是一个强大的2D图形库,设计用于在各种操作系统和硬件平台上提供高效且高质量的2D渲染。这个开源项目由Maxim Shemanarev开发,其核心理念是通过数学和算法优化来实现无锯齿、高精度的图形...

    AGG与GDI两种图形库在MFC下的图形绘制

    在MFC中进行图形绘制时,通常可以使用两种图形库:GDI(Graphics Device Interface)和AGG(Anti-Grain Geometry)。本篇文章将深入探讨这两种图形库在MFC环境下的应用及其特性。 首先,GDI是Windows操作系统内建的...

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

    AGG,全称为“Anti-Grain Geometry”,是一款开源的2D图形渲染库,专为生成高质量、抗锯齿的图像而设计。它提供了一种高效且灵活的方式来创建和操作图形,尤其适用于需要高精度和高性能的场景,比如专业级的图形设计...

    agg2_lite_agg_

    "AGG Lite",这个标题暗示我们关注的是一个轻量级的图形绘制库,可能是一个专为嵌入式系统或资源有限的环境设计的版本。AGG,全称Anti-Grain Geometry,是一个著名的C++矢量图形库,用于高质量的2D图形渲染。它以其...

    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

    详谈pandas中agg函数和apply函数的区别

    - `apply`: 相比之下,`apply`更加**通用**,它可以应用于整个DataFrame或其任何子部分,并执行任意的Python或NumPy函数,甚至用户自定义函数(UDF)。`apply`并不局限于聚合,它允许对数据进行更复杂的操作,如...

    agg_v2.0.0.apk

    agg_v2.0.0.apk

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

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

Global site tag (gtag.js) - Google Analytics