AGG 光栅化(Scanline Rasterizer)

详解D3D/OpenGL光栅化(1) 本篇简单地讨论一个问题:给出图元(三角形/线/点)的顶点坐标及颜色,DirectX 3D(D3D)/OpenGL(OGL)如何确定最终在屏幕上画出的结果? 从D3D Pipeline看[1],这些工作是由光栅化(Rasterization)做的,光栅化是D3D/OGL Pipeline中关键的固定功能阶段,其前面的Shader经过基于Vertex/Patch/Geometry的处理后,以为图元基本单位,输出图元各顶点的位置坐标及各种属性(如Color),交由Raster(1)确定图元能覆盖的像素(2)插值 阅读详情

Scanline Rasterizer

Scanline Rasterizer能够把顶点数据转换成一组水平扫描线,扫描线由一组线段(Span)组成,线段(Span)包含了起始位置、长度和覆盖率(可以理解 为透明度)信息。AGG的抗锯齿(Anti-Aliasing)功能也是在这时引入的。

扫描线Scanline

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

头文件
#include <agg_scanline_u.h> // scanline_u8,scanline32_u8
#include <agg_scanline_p.h> // scanline_p8,scanline32_p8
#include <agg_scanline_bin.h> // scanline_bin,scanline32_bin
类型
scanline_bin,scanline32_bin不携带AA信息的span容器。scanline32_bin中的32代表坐标位数,一般16位已经足够了,所以前一版 本用得更多些(下同)
scanline_u8,scanline32_u8unpacked版的span容器,用每个span来保存各自的线段信息
scanline_p8,scanline32_p8packed版的span容器,相同属性的span会合并成一个
成员类型
struct span;线段数据,其中的成员变量有:x起始位置,len长度,*covers覆盖率
typename iterator,const_iterator;span迭代器
typename cover_type;span中covers类型(覆盖率)
成员方法
iterator begin();
unsigned num_spans();
用于遍历span,begin()取得指向第一个span的迭代器
num_spans()取得容器中span的数目
void reset(int min_x, int max_x);设置容器大小
void add_span(int x, unsigned len, unsigned cover)加入一条线段
void add_cell(int x, unsigned cover)加入一个点
void add_cells(int x, unsigned len, const cover_type* covers)加入一组点
void finalize(int y)
int y();
Scanline容器对应的Y坐标

Rasterizer

怎么翻译呢?光栅化?光栅制造机?嗯~~算了,还是直接叫它Rasterizer(雷死特拉倒)吧-_-!!!

Rasterizer就是把相当于矢量数据的一堆顶点和命令转换成一行行的扫描线的设备,它就象粉刷工人对照着图纸把彩漆刷到墙上一 样。可以说是AGG里最重要的类型之一,套用建翔兄的话就是:

立功了!立功了!不要给GDI任何的机会!伟大的AGG的Rasterizer类!他了继承开源社区的光荣传统!达芬奇、Linus、 唐寅,在这一刻灵魂附体!

Rasterizer是关键对象!他代表了AGG伟大的设计理念!在这一刻!他不是一个人的战斗!他不是一个人!面对着全世界人民的目 光和期待,他深知责任的重大,0.001秒种之后将会是什么样的图像?

头文件
#include <agg_rasterizer_scanline_aa.h>
类型
template<class Clip = rasterizer_sl_clip_int>
 class rasterizer_scanline_aa;
成员方法
template<class GammaF>
void gamma(const GammaF& gamma_function);
设置gamma值。
GammaF为一种仿函数
AGG自带有gamma_power、gamma_none、gamma_threshold、 gamma_linear、gamma_multiply
bool rewind_scanlines();跳到第一个scanline位置,同时设置sorted为true。
这时再加入其它顶点会先清空现有顶点
bool navigate_scanline(int y);跳到y行
bool sweep_scanline(Scanline&);把当前行画入Scanline,当下移一行
void reset();清空
void move_to(int x, int y);
void line_to(int x, int y);
简单的画线功能,单位为1/poly_subpixel_scale
(poly_subpixel_scale一般为256)
void move_to_d(double x, double y);
void line_to_d(double x, double y);
简单的画线功能,单位为像素

void add_path(VertexSource& vs, unsigned path_id=0)

 

加入顶点

 

 

作者:毛毛 来源:www.cppprog.com

 

深入解析AGG:高性能2D图形渲染库的核心架构与应用实践 在计算机图形学领域,2D图形渲染是构建用户界面、数据可视化和嵌入式显示系统的核心技术。其基本原理是将矢量几何图元通过坐标变换、路径生成、光栅化等流程转换为像素图像,最终呈现到显示设备。这一技术对于需要高质量图形输出和跨平台兼容性的应用场景具有重要价值,尤其在资源受限的嵌入式环境或需要软件渲染的特定系统中。AGG(Anti-Grain Geometry)作为一个开源的高性能2D图形渲染库,通过模块化的流水线设计和模板元编程技术,实现了对渲染过程的极致控制与优化。它不依赖特定图形API,完全基于CPU进行高质量 阅读详情

相关推荐

深入探索AGG开源2D图形绘制引擎

AGG(Anti-Grain Geometry)是一个高性能的开源二维图形绘制引擎,它在图形处理领域因其高效的渲染能力及跨平台兼容性而闻名。AGG特别适合于需要高清晰度图形输出的应用程序,如打印输出、矢量图形编辑器和各种图形用户界面。

weixin_30356433的博客 1294

AGG学习之九----自带gsv_text对象raster方式绘制字符

使用AGG绘制字符方式有很多种: 使用AGG自带的 gsv_text 对象;使用 WinAPI 字体引擎;使用 FreeType 字体引擎;使用字体缓存管理器。 首先,我们使用自带的gsv_text对象,在rastser方式下绘制字符。样例代码如下: #include #include #include #include #include #include #incl

ErikLiu的专栏 2073

苍穹外卖项目面试总结话术

美食速递这个项目最初是我参与制作的大创项目,是一款为中南学生提供校园外卖送至宿舍服务的软件,包含系统管理后台和小程序端两部分。其中系统管理后台主要提供给食堂内部员工使用,可以对食堂各个窗口、员工、订单、菜品等进行维护管理;小程序端可以在线浏览菜品、添加购物车、下单等,由学生兼职做跑腿送餐上门服务。这是个前后端分离的项目,我主要是负责后端的用户登录、员工管理,菜品管理,订单管理模块的编码实现。

qq_45195447的博客 1万+

计算机图形学三:光栅化与深度缓存

计算机图形学基础

weixin_44683202的博客 1637

Bybit面经

这段总结描述了求职者在Bybit面试过程中的经历和相关问题,包括面试内容、求职者向面试官提问的问题以及关于Bybit的信息

郑泽洲的博客 2580

别再搞混了!用示波器实测SVPWM:相电压、线电压、端电压波形到底长啥样?(附TI/ST官方笔记解读)

本文详细解析了SVPWM波形实测中的相电压、线电压和端电压的区别与测量技巧,结合TI/ST官方笔记,揭示了马鞍形波形的形成原理及常见误区。通过示波器实测案例,帮助电力电子工程师准确理解并应用这些关键概念,提升电机控制系统的调试效率。

weixin_30632883的博客 431

Rasterizer 开源项目教程

Rasterizer 开源项目教程 1. 项目介绍 Rasterizer 是一个开源的软件光栅化器项目,由 mtrebi 开发并托管在 GitHub 上。该项目旨在帮助开发者理解和实现光栅化技术,这是一种将矢量图形转换为像素图像的过程。通过这个项目,开发者可以深入学习光栅化的基本原理,包括三角形光栅化、纹理映射、抗锯齿技术等。 2. 项目快速启动 2.1 环境准备 在开始之前,请确保您的开发环境已...

gitblog_00526的博客 1077

基于Landsat-8数据的山西省吕梁市地表温度反演研究过程(大气校正法)

1.数据下载:本实验采用的数据是 ①从地理空间数据云下载的来自landsat8 卫星,云量<=1%,时间为2017年5月12日的山西省吕梁市影像数据。为全面覆盖吕梁市,选用了两片影像。 ②吕梁市边界矢量图 2.数据预处理 ...

weixin_45747376的博客 6601

Android文本样式——下

继续就android的文本样式进行分析: 10.MaskFilterSpan MaskFilterSpan,滤镜样式,只有一个构造函数: MaskFilterSpan(MaskFilter filter):参数filter,滤镜样式。 说明: 在android系统里,MaskFilter提供了两个子类,BlurMaskFilter和EmbossMaskFilter,分别用来制作模糊效果和

lixin84915的专栏 4359

SystemC实战:用C++搞芯片建模的5个典型场景(含代码示例)

本文通过五个典型实战场景,详细介绍了如何使用SystemC这一基于C++的硬件建模库进行芯片设计与系统级建模。内容涵盖从基础并发模块构建、事务级总线建模、跨时钟域验证,到与ModelSim协同仿真及多核系统性能探索,并提供了完整的代码示例,帮助软件工程师利用熟悉的C++工具链高效参与硬件架构设计与验证。

weixin_29191761的博客 314

Ceres&OpenCV 单目相机标定(论文复现)

Ceres&OpenCV 单目相机标定(论文复现)

dayuhaitang1的博客 370

(转)用AGG实现高质量图形输出(二)

本文上接《用AGG实现高质量图形输出(一)》,分别介绍了AGG显示流程中的各个环节。 上次讲了AGG的显示原理并举了一个简单的例子,这一篇文章开始讲AGG工作流程里的每个环节。为了方便对照,再放一次AGG显示流程 图 另外,上一篇文章里的例程也很重要,后面的例子都将基于这个代码。 下面,我们来考察AGG显示流程中的每个环节。理解每个环节最好的方法是编写实验代码,建议先参照这里建 立一个可...

weixin_30260399的博客 233

大模型选型实战:为OpenClaw匹配最优“大脑”的全维度考量

大模型不是越贵越好,也不是参数越高越好,适合自己的使用场景才是最好的。按照我的方法,先明确自己的需求,再选对应的模型,配置多模型自动路由,既能保证体验,又能最大限度降低成本。我自己用这套配置用了半年多,不管是写文章、写代码还是处理复杂问题,都完全够用,成本也很低,大家可以参考一下。如果不知道选什么模型,可以在评论区说一下你的使用场景。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 343

aa_demo

agg的渲染流水线:顶点集合->坐标变换->扫描线光栅化器->渲染器->渲染缓冲->屏幕 顶点集合中为double型坐标,会根据线的接边方式和宽度生成远大于原始顶点数的光栅点,这些光栅点坐标被光栅化器进行光栅化,生成cell的集合,每个cell对应屏幕上的一个像素点,但不含颜色信息,只含有alpha和mask值.然后cell集合被处理为扫描线数据,经由渲染器渲染到内存buffer中.

bsxylj的专栏 537

分布式计算Ray框架:从入门到精通完全教程

想象一下,你有一个机器学习模型要训练,数据集大到让你的笔记本电脑直冒烟;或者你需要并行跑几百个爬虫任务,但线程池和多进程搞得你头晕眼花。传统的单机计算已经hold不住这些场景,分布式计算应运而生。然而,传统的分布式框架(如Hadoop、Spark)要么配置复杂,要么对动态任务支持不佳。这时候,Ray闪亮登场!Ray是一个开源的分布式计算框架,专为高性能、灵活性和易用性而生。它最初由UC Berkeley的RISELab团队开发,目标是让开发者用最少的代码实现分布式任务。无论是数据处理、机器学习,还是仿真任务

大模型大数据攻城狮的专栏 1318

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

MFC中使用agg输出字符

<br />void CmfcaggView::OnDraw(CDC* pDC) { CmfcaggDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; RECT rt; ::GetClientRect(m_hWnd, &rt); HDC hdc = ::GetDC(m_hWnd); int width = rt.right - rt.left; i

give me five 1160

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

光栅化 Rasterization

光栅化Rasterize三角形(判断点在三角形内外,包围盒,Z-buffer算法,设置像素颜色)

qq_43836269的博客 1268

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

开源项目Rasterizer常见问题解决方案

开源项目Rasterizer常见问题解决方案 1. 项目基础介绍和主要编程语言 项目介绍:Rasterizer是一个基于CPU的正向/延迟渲染器,它实现了深度缓冲、纹理映射、法线映射以及Blinn-Phong光照模型。项目的目的是帮助开发者理解渲染算法是如何将一组构成3D世界的顶点转换成2D图像。项目代码清晰、易于理解,适用于任何希望深入理解图形渲染原理的开发者。 主要编程语言:C++ 2. 新手...

gitblog_00233的博客 627

AGG入门

AGG入门   一、配置开发环境   AGG入门(一) - 配置开发环境 AGG是一个高效的、高质量的、开源的矢量图形库,类似的有:GTK+的Cairo,Microsoft的GDI+。在三者中,AGG的性能是最高的(不讨论Skia和Direct2D,他们有OGL和DX的硬件加速,绘图速度根本不是一个档次的)。让我们细数一下他的优缺点: 优点:效率高,质量高(有反锯齿),

yinyhy的专栏 1万+

代码版本记录(V2)

2. 在 diff-gaussian-rasterization/cuda_rasterizer/auxiliary.h,对getRect函数进行修改,比起V1求的是能够覆盖整个椭圆的矩形,V2更直接求出与椭圆面积最为匹配的矩形坐标,不再需要angle。(1)网络结构本身(2)是否还没有训练到最好的收敛状态,可以试一试30000次以上的迭代次数,可能在中间达到最优,用list/test存储下来,还可以用matplot/tensorboard画曲线。=16,18,14等的对比。2. 原文、V1、V2对比。

weixin_46933478的博客 1213

OpenGLES Android篇零基础系列(三):OpenGL ES的渲染管道及VertexShader与FragmentShader

前言在前2篇文章中,我们都说到着色器,且在第二篇中正式说到,这着色器只能用在OpenGL ES2.x等可编程管道里面,而在OpenGL ES1.x是不能用的。但我们一直没有说这是为什么,两者有什么区别。那这篇我们就一起来学习下OpenGL ES中的渲染管道。正文管道,英文名叫Pipeline,相信用过FaceBook图片加载库的同学对这个管道并不陌生,因为SimpleImageDrawee里面也是用

死磕到底 5818

Rasterizer: 革新的遮挡剔除系统

Rasterizer: 革新的遮挡剔除系统 1、项目介绍 rasterizer 是一款先进的软件遮挡剔除系统,旨在优化三维场景的渲染效率。灵感来源于Intel的OcclusionCulling项目,但rasterizer采用了完全不同的技术,并在单线程AVX模式下处理全集遮挡器时,速度可达到Intel方案的2-3倍。该项目提供了Sponza和Castle两个示例数据,让您能够直观地体验其卓越性能。...

gitblog_00006的博客 481

SPAN 的使用详解

package com.example.spantext; import android.app.Activity; import android.graphics.BlurMaskFilter; import android.graphics.BlurMaskFilter.Blur; import android.graphics.Color; import android.graphics.

liao277218962的专栏 4196

AGG第三十七课 rassterizer的add_path添加顶点源受制于 cell_block_limit

场景说明:当添加顶点源到rasterizer的add_path接口的时候,实际上需要考虑顶点源可能占用的cell的总数,目前cell_block_limit in agg_rasterizer_cells_aa.h的限制是1024,这种情况下,有必要在添加一定数量的顶点源之后,即使调用render_scanline函数进行渲染到画布上!!该问题已经在项目中重现,不能够说是bu...

weixin_34220834的博客 186
上一篇: AGG 坐标转换管道(Coordinate conversion pipeline)
下一篇: AGG 渲染器(Renderers)
bitasd
博客等级 码龄19年 11粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值