vertex source顶点源直接传递给scanline rasterizer效果

AGG内置了大量的顶点源,我们可以直接调用,他们包括:

agg::path_storage

agg::arc

agg::rounded_rect

agg::ellipse

agg::curve3

agg::curve4 ......

1)针对agg::path_storage

现在尝试查看agg::path_storage直接传递给scanline rasterizer之后的效果:

//现在我们尝试描绘一条线段,这里有一个问题不通过agg::conv_stroke,怎么

//设置线段的宽度,默认值也没有

//什么也没有,根本无法画线,看来还是需要传递给agg::conv_stroke??

agg::path_storage ps1;

ps1.move_to(130,130);

ps1.line_to(140,140);

ras.add_path(ps1);

agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255,0,0));

ras.reset();

//难道不能够直接描绘,还是我们描绘的方式不正确!!

//如果再次添加一条线段,现在可以构成一个闭区间,又会如何:

agg::path_storage ps1;

ps1.move_to(130,130);

ps1.line_to(140,140);

ps1.line_to(150,130);

ras.add_path(ps1);

agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255,0,0));

ras.reset();

//出来了,终于出来了,这是一个实心的三角形,填充颜色为红色。

简单的结论:当我们不经过agg::conv_stroke的时候,实际上这些顶点源可能没有方向,不可能啊!!line_to是干啥的!!

2)针对agg::ellipse

可对比如下的两份代码:

1)

agg::ellipse ellipse(250, 125, 125, 125);

ras.reset();

ras.add_path(ellipse);

//实心圆

2)

agg::ellipse ellipse(250, 125, 125, 125);

agg::conv_stroke<agg::ellipse> stroke(ellipse);

ras.reset();

ras.add_path(stroke);

//空心圆

所以我们终于知道,当我们将顶点源传递给stroke是画线,如果直接add_path实际上

是渲染一个形状,现在假设当agg::ellipse传递给agg::conv_stroke的时候,实际上

将圆的顶点全部传递给了线段容器,线段容器,这个时候线段容器当然是把圆的弧线

进行了端点的相连,但是不会填充颜色,因为看成是线段

但是直接传递给ras的时候,是一系列的顶点,而Scanline Rasterizer能够把顶点数据转换成

一组水平扫描线,扫描线由一组线段(Span)组成,这个时候,实际上就是圆同一水平线的

两点之间进行了扫描连接.

总结:顶点源如果能够形成一个闭区间,完全能够传递给ras,描绘一个实体,如果不能,

将不会渲染任何的东西,当通过agg::conv_stroke传递给ras,描绘的是线段。

/*

两种不同的方案,一种是当做是标志,而不是一个填充的实体,上面是一个空心

三角形,而下面是一个填充的三角形。在这里可以详细的描述一点:任何的多边

形都可以

使用三角形来拆分,所以

*/

//agg::conv_stroke<agg::path_storage> stroke(ps);

//ras.add_path(stroke);

agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(0,0,0));

由于画太极图的需要,我需要进行圆形的填充,GDI提供了Pie函数,而AGG并没有提供任何的函数

因此提出的一种方案:

填充颜色,对圆进行填充颜色,真的非常麻烦,没有提供什么接口,也找不到任何

的资料,我打算提供每一行的圆的两点,然后画直线的方式填充。经过上面的讨论

终于找到解决的方案。



时间: 2024-08-23 12:17:42

vertex source顶点源直接传递给scanline rasterizer效果的相关文章

scanline rasterizer 和 agg::conv_stroke

我一直都是认为agg::conv_stroke保存了线段的端点的形状,线段的宽度,并没有具体 分清楚,为什么顶点源需要传递给agg::conv_stroke(如果不传递给agg::conv_stroke 会怎么样),然后agg::conv_stroke实例又传递给agg::scanline_rasterizer,现在明 白了一些:传递给agg::scanline_rasterizer是构建成一组水平的扫描线,而在上面的 stroke只是添加了一些标志可以在这里引入agg::conv_term而在

如何获取url中的参数并传递给iframe中的报表

在使用报表软件时,用户系统左边一般有目录树,点击报表节点就会在右侧网页的iframe中显示出报表,同时点击的时候也会传递一些参数给网页,比如时间和用户信息等.如何使网页中的报表能够获取到传递过来的参数呢?以下用报表软件FineReport简单介绍一些. 具体实现过程 将报表生成页面时,给网页添加onload事件,首先获取url中的参数,然后嫁接到iframe的src上,或者通过获得的参数拼接处完整的报表url赋给iframe的src. <html> <head> <title

详解~实现Runnable方法创建线程之为什么要将Runnable接口的子类对象传递给Thread的构造函数

/** * @author zhao * @TIME 0419 22:56  End *定义线程的第二种方法:实现Runnable接口 *步骤:1,定义一个子类实现Runnable接口 *    2,在子类中覆盖run()方法,并且将多线程锁执行的代码写入run方法中 *    3,通过Thread类建立线程对象: *    4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数.  为什么要将Runnable接口的子类对象传递给Thread的构造函数.  因为,自定义的

PHP中的多行字符串传递给JavaScript方法两则

PHP和JavaScript都是初学.近期有这么个需求: 例如说有一个PHP的多行字符串: $a = <<<EOF thy38 csdn blog EOF; 传递给JavaScript后要等价于: var c='thy38\ncsdn\nblog'; 由于对这两门语言的理解低到不知怎样Google.仅仅好自己摸索出方法两则: 1.  将PHP先转义.然后切割.然后转JSON,然后JavaScript parse,最后用\n拼接. var b=JSON.parse(<? php ec

将数组名作为变元传递给“被调用函数“

#include <stdio.h> void change_array(char*, int); int main(void) { char a[10] = "abcdefg"; printf("The address of origin a = %p\n",a); change_array(a, 10); printf("The address of later a = %p\n",a); printf("%s\n&qu

django中将views.py中的python方法传递给html模板文件

常规的模板渲染 from django.db import models # Create your models here. class ArticalType(models.Model): caption = models.CharField(max_length=16) class Category(models.Model): caption = models.CharField(max_length=16) class Artical(models.Model): title = mo

json数组作为参数传递给java时候object问题

解决方案是json数组直接作为参数传给后台的时候会被转化为Object,而在java中得不到想要的list数据, 利用函数将object转换成string字符串再作为参数,在java端用request.getParameterMap();然后用JSONObject.fromObject(paramMap);转成JSONObject,就类似于map就可以得到相应的参数 http://www.worlduc.com/blog2012.aspx?bid=1023161http://www.worldu

celery的log如何传递给django,由django管理

celery自己管理log目录 celery worker --autoscale=4,1 --app=erebus.celeryapp:app -l info -f /home/admin/output/erebus/logs/worker.log -Q erebus,celery celery beat --loglevel info --app erebus.celeryapp:app --logfile /home/admin/output/erebus/logs/beat.log ce

php 二维数组传递给 js 问题解决记录

需求: php从数据库中读取到二维数组.传递到js中 实现步骤: php:json_encode  →   json  →  js:eval 即在php中使用json_encode()将php的二维数组转化成json格式.传递到js中,使用eval()解析得到js的二维数组. 代码: php: <?php header("Content-Type: text/html; charset=utf8") ; $con=mysqli_connect("url",&q