首页 > 其他分享 >A-Buffer简介

A-Buffer简介

时间:2023-04-24 11:11:09浏览次数:56  
标签:渲染 Buffer 简介 物体 像素 算法 半透明

A-Buffer简介

A-Buffer是一种图形学(渲染方向)上的用于可见面分析(Visble Surface Detection)的技术。

可见面分析最常见的技术有以下三种:

  1. Z-Buffer 算法(或者叫 Depth-Buffer 算法)
  2. Back-Face Detection方法,该方法用于剔除不可见(反方向的)面
  3. A-Buffer 方法,也是本文要介绍的方法。

A-Buffer是Z-Buffer方法是Z-Buffer的衍生方法,因此了解ABuffer有必要回顾一下ZBuffer。

Z-Buffer的缺陷

Z-Buffer是用于剔除 不透明 物体的算法。假设某个像素有A B C三个不透明物体重叠,A在最上面,B在中间,C在最底下,那么Z-Buffer的结果就是A,意味着B、C都被A遮蔽了,因此可以针对该像素点剔除

Z-Buffer是一个用于存储深度信息的算法,其大小与Color Buffer一致,每一个像素对应一个深度信息。Z-Buffer永远存储距离屏幕最近的点的深度信息

算法的伪代码可以表示如下:

Init Z-Buffer as size = sizeof(ColorBuffer), All one initialized
# P.S. 0 <= ZBuffer [x,y] <= 1
For each object in ObjectsToRender:
    if object.pixel.depth < ZBuffer[object.pixel.xy]:
        ZBuffer[object.pixel.xy] = object.pixel.depth
        render this object
    else:
        Not to render this object

该算法只适用于不透明物体。因为渲染半透明物体需要各个半透明物体的相对位置信息来正确地颜色混合(Blending)(见半透明渲染部分)。

Z-Buffer 的衍生

虽然Z-Buffer不适用于半透明物体渲染,但是将Z-Buffer稍微做修改就能渲染半透明物体。修改的目的是为了在渲染时保留各个半透明的顺序信息,也即,针对每一个像素而言,需要记录的不仅仅只是一个单一的深度信息,还要记录下该像素关联了哪些图元

这种修改又称为A-Buffer,即Accumulation Buffer, Accumulation 取“累计”之意,意为该Buffer针对每一个像素记录累计的图元信息。

具体实现方法参见:A-Buffer Method from GeeksForGeeks

标签:渲染,Buffer,简介,物体,像素,算法,半透明
From: https://www.cnblogs.com/nathanli1211/p/17348837.html

相关文章

  • hibernate.cfg.xml配置文件简介
    1.Hibernate核心配置文件,也即hibernate.cfg.xml,还可以是hibernate.properties格式。包含了数据库连接的相关信息以及映射文件的基本信息。通常情况下,该配置文件默认放在项目的src目录下,当项目发布后,该文件会在项目的WEB-INF/classes路径下。2.常用的模板<?xmlversion="......
  • Photoshop简介
     1.界面介绍导航菜单标题栏工具条浮动面板 2.创建文件导航菜单-文件-新建名称(可以改)宽度、高度(是像素px)背景内容透明(会在背景出现灰白格)白色 3.图层创建新图层-图层浮动面板下方,垃圾桶旁边的折角纸图案就是新建图层新建的图层会在上一个就图层上方(默认)图......
  • SpringSecurity从入门到精通:简介
    SpringSecurity从入门到精通:简介SpringSecurity是Spring家族中的一个安全管理框架,想比另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富一般来说中大型的项目都是使用SpringSecurity来做安全框架,小项目有Shiro的比较多,因为想比与SpringSecurity,Shiro的......
  • 时间序列预测(零)--简介
    时间序列预测可以称得上是一个及其普遍的一个算法问题,解决的方法也比较成熟,你可能第一时间想到的就是AR模型,以及各种自回归模型。然后xgboost似乎也能做时序问题,只是将原有的问题当成回归问题即可,某种意义上可解释性也能够得到一定的满足。再然后就是GRU、LSTM这类循环神经网络,借......
  • Nginx 入门实战(1)--简介及安装
    本文介绍的Nginx为开源版本Nginx,官网地址为:https://nginx.org/en/,如需了解商业版本,可访问商业官网:https://www.nginx-cn.net/;文中所使用到的软件版本:nginx1.22.1、pcre8.43、opnessl1.1.1s、CentOS 7.9.20091、简介nginx[enginex]是一款Http和反向代理服务器、邮件......
  • 01-Httprunner简介、安装及基本使用教程
     https://www.jb51.net/article/237541.htm httprunner是一款面向 HTTP(S) 协议的通用测试框架。只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求,本文给大家介绍Httprunner安装使用教程,感兴趣的朋友一起看看吧......
  • CODEQL使用简介
    codeqlcodeql是一个可以对代码进行分析的引擎,安全人员可以用它作为挖洞的辅助或者直接进行挖掘漏洞,节省进行重复操作的精力下载:解析引擎:https://github.com/github/codeql-cli-binaries/releasesSDK(规则库):https://github.com/github/codeql使用方式简介:1.解压解析引擎,......
  • java:文件写入BufferedOutputStream写入字节和PrintWriter写入字符
    BufferedOutputStream和FileOutputStream写入二进制字节方法定义publicBufferedOutputStream(OutputStreamout){示例BufferedOutputStreamwriter=newBufferedOutputStream(newFileOutputStream("demo.txt"));writer.write("helloworld".getBytes());w......
  • 消息中间件简介
    消息中间件(MQ)的定义其实并没有标准定义,一般认为,消息中间件属于分布式系统中一个子系统,关注于数据的发送和接收,利用高效可靠的异步消息传递机制对分布式系统中的其余各个子系统进行集成。几个关键词:高效:对于消息的处理处理速度快。可靠:一般消息中间件都会有消息持久化机制和其他......
  • 快速上手Linux核心命令(一):核心命令简介
    Linux核心命令系列文章目录快速上手Linux核心命令(一):核心命令简介快速上手Linux核心命令(二):关机、重启快速上手Linux核心命令(三):文件和目录操作命令快速上手Linux核心命令(四):文件内容相关命令快速上手Linux核心命令(五):文本处理三剑客快速上手Linux核心命令(六):Linux的文本编辑器vi......