1源码目录

1)examples

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

2)font_freetype

??

3)font_win32_tt

??

4)gps

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

5)include

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

6)src

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

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

2 框架代码分析

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

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

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

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

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

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

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

一个比方来介绍AGG里面的一组关系,rasterizer,scanline,和renderer之间的关系.它们就如同你在黑板面前拿着一本一册,用粉笔画黑板报.那本画册就是rasterizer,他存储图形,黑板套装(包括粉笔)就是我们的renderer,而你就是中间的scanline. AGG中就是通过scanline把rasterizer中存放的栅格信息用粉笔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类型,会导致问题更加复杂。

v是vertex的缩写,g是generator的缩写。

1 agg_vcgen_xxxx

历史从agg_gen_xxxx到agg_cgen_xxxx到agg_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

转载于:https://blog.51cto.com/fengyuzaitu/1961149

AGG第二课 代码框架以及命名规则相关推荐

  1. 代码命名,代码里的命名规则:错误的和正确的对比 命名方法总结 “自我描述的源代码”用代码表达出你的思想,让其他人通过代码能明白你的意图。...

    http://www.aqee.net/express-names-in-code-bad-vs-clean/ 编程初学者总是把大量的时间用在学习编程语言,语法,技巧和编程工具的使用上.他们认为,如果 ...

  2. 【转】代码里的命名规则:错误的和正确的对比

    原文出处: goyello   译文出处: 外刊IT评论 编程初学者总是把大量的时间用在学习编程语言,语法,技巧和编程工具的使用上.他们认为,如果掌握了这些技术技巧,他们就能成为不错的程序员.然而,计 ...

  3. 吴恩达Deeplearning第二课代码bug修正大全

    解决维度不匹配问题 第一周 Initialization 错误: plt.title("Model with Zeros initialization") axes = plt.g ...

  4. Spring框架版本命名规则

    常见软件的版本号命名 软件 升级过程 说明 Linux Kernel 0.0.1 1.0.0 2.6.32 3.0.18 ... 若用X.Y.Z 表示,则偶数Y 表示稳定版本,奇 数Y 表示开发版本. ...

  5. ios架构与开发第二课 代码规范管理与自动化构建

    05 自动化准备:如何使用 Fatlane 管理自动化操作? 要成为一个优秀的 iOS 开发者,我们要做的事情远多于"开发",例如我们要构建和打包 App,管理证书,为 App 进 ...

  6. C# 编程入门第二课 注释变量,VS2019快捷键,String和string,命名规则,赋值运算符,+号作用占位符,转义字符算术运算符,类型转换

    C# 编程入门第二课 文章目录 C# 编程入门第二课 1. 注释 2 变量 3.VS2019快捷键 4. String和string 5. 命名规则 6. 赋值运算符,+号作用 7. 占位符 8.转义 ...

  7. 二、Python第二课——变量命名规则及字符串变量相关函数

    目录 一.变量命名规则 二.字符串变量及相关函数 1.字符串变量 2.相关函数 最后琐碎杂物: 1.字符串之间的拼接 2.字符串格式控制(制表符和换行) 一.变量命名规则 正如其他编程语言一样,程序离 ...

  8. 【C/C++高质量代码】-----第二章 命名规则

    自由,心灵和肉体的自由,随心所欲而不逾矩.嗯·····咱这是二十岁就达到七十岁的思想境界啦~~ 文章目录 前言 1. 共性命名规则 2. Windows应用程序命名规则 总结 前言 你的变量和函数都是 ...

  9. R语言入门教程知识 第二章 赋值代码与命名规则

    快捷键 新建脚本:  Ctrl + shift + N 清理控制台快捷键: Ctrl + L 赋值快捷键ALT + -  赋值法 1.符号方式赋值: 对象名 <- 对象值 2.函数方式赋值:as ...

最新文章

  1. 2021年大数据Flink(三十二):​​​​​​​Table与SQL案例准备 API
  2. 基于STM8H1K08的ISP HUB控制器
  3. 《大话数据结构》读书笔记-图
  4. windows下配置java
  5. Java_异常_04_ OutOfMemoryError系列
  6. 监督学习 | SVM 之支持向量机Sklearn实现
  7. 微机接口技术实用教程(第2版)-任向民,王克朝,宗明魁-课后答案
  8. 电商ERP软件、订单管理系统、库存管理系统
  9. 数字图像处理 关于matlab的图像处理操作
  10. 【python爬虫】喜欢看小说又手头紧的小伙伴一定要看这篇文章,带你一步步制作一个小说下载器
  11. Navicat 连接超时问题
  12. 把互联网界的大牛——王煜全老师开出的书单和大家分享一下
  13. github 修改密码密码_雇主要求提供GitHub密码。 如何处理呢?
  14. 自制乐高同款机器人瓦力—Wall-E
  15. 【傻瓜图文式】Win系统下制作U盘CLOVER引导+安装原版Mavericks10.9+安装问题总结
  16. 国内“孩子青春期”图书中的iPhone:正写书的程序员爸爸点评《拆解青春期女孩的小心事》
  17. 高并发架构系列:什么是流量削峰?如何解决秒杀业务的削峰场景
  18. 图片解码 java_Java 8实现图片BASE64编解码
  19. E/KING_CARD: WebSettingsExtension getQProxyEnabled false
  20. C语言double里的deta,蚁群算法(C语言版)

热门文章

  1. R语言数据可视化 ggplot2基础3 添加几何对象
  2. UA MATH571B 试验设计V 2K析因设计
  3. 城市规划理论1 选址理论
  4. 超图js版本添加矢量图层并在图层上绘一个面要素
  5. 用RadASM 开发窗口程序
  6. Java 中的字符串(String)与C# 中字符串(string)的异同
  7. Python基础-re模块
  8. node实现爬取当前页面链接实现
  9. Flex布局及其应用
  10. Spring系列之AOP实现的两种方式