千家信息网

AGG第二课 代码框架以及命名规则

发表于:2025-02-16 作者:千家信息网编辑
千家信息网最后更新 2025年02月16日,1源码目录1)examples最大的参考价值,作者在AGG库下的example目录中,创建了很多win32的测试用例,创建使用的是VC6.0的工程,目前采用VS2005,可以轻松的进行工程的导入。初学
千家信息网最后更新 2025年02月16日AGG第二课 代码框架以及命名规则

1源码目录

1examples

最大的参考价值,作者在AGG库下的example目录中,创建了很多win32的测试用例,创建使用的是VC6.0的工程,目前采用VS2005,可以轻松的进行工程的导入。初学者可以简单的使用。进入agg\examples\win32_api目录,点击example.dsw,允许进行工程的导入,就OK了。接下来会对每一个例子进行详细的应用剖析。

2font_freetype

??

3font_win32_tt

??

4gps

多边形集合算法,后面剖析一二!!

5include

这是一个非常重要的文件夹,里面包含有三个文件夹和一堆的头文件:ctrlplatform(作者在这里封装了系统的函数,提供了一种简单测试AGG的方式),util.大部分的头文件都是完整的包含类的声明和实现,受到模块类定义的限制,

6src

该目录下的源码文件有vcgentrans等,不明所以,还有platform

util等文件夹,对应于每一个平台的实现文件。

2 框架代码分析

rendering buffer (frame buffer 我们可以理解为显存)存储一块连续的内存区域,不知道自身具体存储内容的结构,只按照行的长度,向外提供行指针,有宽、高、步长属性。

spanrender 水平区段绘制器,用于绘制scanline中的段,与renderingbuffer直接交互,将scanline的内容映射到显存中。

outline 轮廓线,将矢量数据转化为点阵格式 rasterizer内部类。

scanline将点阵格式的点集合,转化成为renderer使用的水平区段。

renderer将点阵数据填上颜色放入显存中

rasterizer栅格器,用于转化上层的矢量数据到栅格集合中。

Vectortransitions 矢量变化,一个复杂的集合对应着nconvs 对点集合的操作。

一个比方来介绍AGG里面的一组关系,rasterizer,scanline,renderer之间的关系.它们就如同你在黑板面前拿着一本一册,用粉笔画黑板报.那本画册就是rasterizer,他存储图形,黑板套装(包括粉笔)就是我们的renderer,而你就是中间的scanline. AGG中就是通过scanlinerasterizer中存放的栅格信息用粉笔pixfmt_renderer转化到黑板rendering_buffer中,完成最终的绘制.


变量定义:float 还是double类型

实际上,这来源于C/C++对float和double类型的处理方法。如果你定义一个类似如下的函数:

void foo(float x, float y) ,传递的参数值永远都是double类型。除此之外,在矩阵变换中,使用double类型是最合理的,因为采用float类型,只能够显示7到10位小数点,遇到精度的计算错误是难以避免的。因此C/C++采用double类型,那是再自然不过的选择。

凡是有例外,我还是非常赞同在顶点源中使用float类型,例如: agg::path_storage,还有其他的转换器保存了大量的顶点数组(agg::conv_stroke)。交叉使用double和float类型,会导致问题更加复杂。


vvertex的缩写,ggenerator的缩写。

1 agg_vcgen_xxxx

历史从agg_gen_xxxxagg_cgen_xxxxagg_vcgen_xxxx

"vcgen""VertexaccCumulating Generators"的缩写

2 agg_vpgen_xxxxx

"vpgen" "Vertex Pass-through Generator"的缩写

3 其他的命名

affine_matrix à trans_affine

viewport àtrans_viewport

4 邮件记录

I also would like to rename some classesand files, particulary agg_gen_xxxx to

agg_cgen_xxxx (where 'c' refers to"Cumulating" generators), there're also will

be agg_pgen_xxxxx refering to"Pass-through" generators. First ones acculumate

vertices of the whole contour (not path)before generating the path, the last

ones are fed with vertices and then askedto produce some other vertices on

demand. A typical example of thePass-through generator is Liang-Barski polygon

clipper.

Also, for the sake of consistency I'd liketo rename affine_matrix to

trans_affine, because there are trans_perspective,trans_bilinear, and

trans_warp_magnifier.


>
> > Or just:
> >
> > agg::rasterizer_fill
> > agg::rasterizer_fill_aa
> > agg::rasterizer_line
> > agg::rasterizer_line_aa
> >
> > It's shorter but maybe a bit less clear.
>
> If you want to fit the PostScript naming, maybe you could use:
>
> agg::rasterizer_fill...
> agg::rasterizer_stroke...

I like these also.

>
> > So, what is your vote: solid/outline, scanline/outline
> > of fill/line?
>

My preference in order would be:

1) rasterizer_fill/stroke
2) rasterizer_fill/line


rendering buffer (frame buffer 我们可以理解为显存)存储一块连续的内存区域,不知道自身具体存储


内容的结构,只按照行的长度,向外提供行指针,有宽、高、步长属性。

spanrender 水平区段绘制器,用于绘制scanline中的段,与rendering buffer直接交互,将scanline的内


容映射到显存中。

outline 轮廓线,将矢量数据转化为点阵格式 rasterizer内部类。

scanline将点阵格式的点集合,转化成为renderer使用的水平区段。

renderer将点阵数据填上颜色放入显存中

rasterizer栅格器,用于转化上层的矢量数据到栅格集合中。

Vectortransitions 矢量变化,一个复杂的集合对应着n多convs 对点集合的操作。

cw(clockwise):顺时针

ccw( counter-clockwise):逆时针

flip_y翻转y轴,来自于某些操作系统对于渲染缓存的y轴坐标的方向问题(windows,BeOS系统)


6)

premultiplied pre是预先的意思,而multiply是乘法的意思,按照字面上的理解就是预先乘以,简称预乘,对于一些图片虽然提供了alpha通道的值,但是所有的RGB分量都是已经乘以alpha通道得到的值,这样子,就可以在进行图片的叠加显示(专业术语是混合),减少了一道工序。

以前 color = alpha*A+(1-alpha)*B

现在 color = A * (1-alpha)*B


类型 文件 数据 显存 点阵 矢量 就是 栅格 存储 内容 区段 格式 水平 目录 缩写 黑板 复杂 工程 文件夹 系统 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库连接满会出现什么情况 河北万道网络技术集团 乐陵软件开发哪家价格便宜 gps时钟同步服务器设置 客户端连接服务器没有权限 北京招聘软件开发工作内容 画画网络安全手抄报 大连教育局网络安全宣传周 移动网络技术岗会问什么 重庆璧山蔬菜配送软件开发 阿里云云服务器优缺点 跟软件开发相关的工作 湖南什么是软件开发五星服务 我的世界服务器怎样介绍 国网网络安全实战攻防新闻稿 我的世界无人管理服务器号推荐 三门峡网络技术费用 上海gps时间服务器时间同步 商超数据库设计e-r图 无锡编程软件开发中心 网络技术的岗位 乌鲁木齐云服务器质量保障 深圳中介强互联网科技有限公司 从零开始服务器零崽 国外主要期刊数据库 易安卓 服务器 tcu软件开发与标定 信息网络安全中的风险点 鹰潭个人服务器价格 厦门微达人网络技术有限公
0