Error

C++博客 首页 新随笔 联系 聚合 管理
  217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks

传说这就是AGG:

agg

要理解这张图上的几个概念:

*vertex source: 顶点源。一切的图像的世界是由点构成的。

*cordinate conversion pipeline: 坐标转换管道。不用自己去担心各种坐标系?

*scanline rasterizer: 光栅化,把顶点数据处理合成一组组线段,这里可能会有一些fix或者effect。

*renderers: 渲染器

*rendering buffer: 用于存放像素点的内存

我的理解是这样:图像是以点集的方式存在的,要画图先是冲一组点集开始,先把这一组点的坐标转换成目标坐标,然后通过光栅化形成一组线段,然后通过渲染器把这一组线段渲染到buffer上面形成面。点->线段->面

*****************************************************************************************************

一、vertex source

 

我理解它是一个concept,官方解释是这个:

    所有实现了void rewind(unsigned path_id);和unsigned vertex(double* x, double* y);的类。

agg提供的vertex source concept如下(可以自己扩展):

ellipse 圆

arc 弧线

curve3 curve4 贝塞尔曲线

gsv_text AGG自带字模的文字输出(只支持ASCII码)

gsv_text_outline<>  可变换文字,输入为gsv_text和变换矩阵

rounded_rect  圆角方形

path_storage 路径存储器,可以用join_path方法加入多个顶点源。

arrowhead  箭头

 

二、coordinate conversion pipeline

    坐标转换管道用于改变顶点源产生的顶点,包括坐标、命令、产生新顶点等。如对顶点进行矩阵变换、插入顶点形成虚线之类的功能。

1.变化矩阵 trans_affine

头文件:#include <agg_trans_affine.h>

接口:scale 缩放、rotate旋转、translate平移、矩阵*乘法、invert取反矩阵

2.坐标转换管道

template<class VertexSource, class Markers = null_markers> struct conv_stroke;

变成连续线 构造参数为VertexSource width属性决定线宽。

template<class VertexSource, class Markers = null_markers> struct conv_dash;

虚线

template<class MarkerLocator, class MarkerShapes> class conv_marker;

建立标记

template<class VertexSource> struct conv_contour;

轮廓变换

template<class VertexSource> struct conv_smooth_poly1_curve;

圆滑过渡多边形各顶点

template<class VertexSource> struct conv_bspline;

圆滑过渡多义线各顶点

template<class VertexSource, class Curve3 = curve3, class Curve4 = curve4> class conv_curve;

可识别VertexSource中的曲线信息

template<class VertexSource, class Transformer = trans_affine> class conv_transform;

矩阵变换 用变换矩阵重新计算顶点位置

 

三、scanline rasterizer

1.scanline

扫描线是一种保存span的容器,span用于表示一小条(水平方向)细线。图像中同一行的span组成一个Scanline

2.rasterizer

Rasterizer就是把相当于矢量数据的一堆顶点和命令转换成一行行的扫描线的设备,它就象粉刷工人对照着图纸把彩漆刷到墙上一样

 

四、renderers

    渲染器负责表现扫描线Scanline中的每个线段(span)。在渲染器之前,AGG图形中的线段是没有颜色值的,只是位置、长度和覆盖率(透明度)。渲染器赋于线段色彩,最终成为一幅完整的图像。

    渲染器被分成底中高三层。其中底层负责像素包装,由PixelFormat Renderer实现;中层是基础层,在PixelFormat Renderer的基础上提供更多方法,是所有高层渲染器依赖的基础,由Base Renderer实现;高层负责渲染Scanline中的线段,由Scanline Renderer等实现。

 

五、rendering buffer

Rendering Buffer是一个内存块,用于保存图像数据。这是AGG与显示器之间的桥梁,我们要显示AGG图形实际上就是识别这个内存块并使用系统的API显示出来 而已(实际上几乎不需要做转换工作,因为无论是Windows还是Linux,API所用的图像存储格式与Rendering Buffer都是兼容的)。

 

差不多了,其他的东东现在看多了白搭,俺们要在战斗中学会战斗,,,

posted on 2012-09-10 16:36 Enic 阅读(186) 评论(0)  编辑 收藏 引用 所属分类: agg

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理