计算机图形学理论(4):缓冲区

本系列根据国外一个图形小哥的讲解为本,整合互联网的一些资料,结合自己的一些理解。

什么是缓冲区?

缓冲区是保存某些数据的临时存储空间。

为什么我们需要缓冲区?原因很简单,当数据量很大时,因为计算机无法同时处理整个数据,因此在处理当前数据集时需要额外的空间来存储其余数据。

在计算机图形学中,缓冲区有多种定义方式。

  • 分辨率:宽度(n) x 高度(m)
  • 深度(或精度):k
  • 位数/像素

例如,如果我们想要每个像素使用 RGB 通道,则一个通道需要 8 位,总共 24 位(3 x 8 位)。
image.png

OpenGL 中的缓冲区

在openGL中,有颜色缓冲区、深度缓冲区、模板缓冲区等。

颜色缓冲区用于显示:

  • 前后
  • 辅助(存储处理中的图像并对其应用一些操作)
  • 立体显影(用于头戴式显示器。它们为眼睛的每一侧都有两个独立的显示。)

深度缓冲区用于遮挡。它只保存 z 值,即灰度表示。

模板缓冲区类似于使用蒙版进行绘画。你把一个有孔的模具放在纸上,然后你在纸上喷漆,结果将是一张与孔所在位置相对应的黑色纸张。模板缓冲区为绘制区域存储 1 位值,为其他区域存储 0 位值。
image.png

写入缓冲区

从概念上讲,我们可以将所有内存视为一个大型的二维像素数组。我们读取和写入矩形像素块,帧缓冲区是该内存的一部分。
写入帧缓存
image.png

位写入模式

source源和destination目标以按位方式组合,有 16 种可能。
image.png

缓冲区选择

OpenGL 可以从任何缓冲区(前、后、深度)读取。但要注意,帧缓冲区中像素的格式与处理器内存中的像素格式不同,而且这两种类型的内存驻留在不同的地方————这会导致打包和拆包、读取速度慢的问题。

我们使用“glReadPixels”函数读取缓冲区。
image.png
例如,读取图像缓冲区将是:
image.png

缓冲区写入的应用场景

混合与合成

将绿幕替换成自定义背景。
image.png

不透明度和透明度(alpha 混合)

不透明的表面不允许光线通过,透明表面允许所有光线通过。那么半透明呢?它将会通过“一些”光线。

我们可以将半透明度表示为“1-不透明度”或“1-alpha”。
背景在向左移动时不断改变 Alpha 值。当它等于0时,物体最终变得透明。

写入模型

我们使用 RGBA 颜色的分量来存储不透明度。在渲染过程中,我们可以扩展我们的写入模型以使用 RGBA 值。
源分量 * 源因子 + 目标分量 * 目标因子 混合生成

混合方程

让我们为每个 RGBA 分量定义源和目标的混合因子。

  • source = [s_r, s_g, s_b, s_alpha]
  • destination = [d_r, d_g, d_b, d_alpha]

以下是源颜色和目标颜色:

  • source factor = [b_r, b_g, b_b, b_alpha]
  • destination factor = [c_r, c_g, c_b, c_alpha]

混合为
c = source*source_factor target*destinaion_factor ,其中 c 将是新的目标因子。
Alpha混合

渲染顺序依赖

当我们渲染一个对象时,以正确的顺序渲染非常重要。

因为多边形是按照沿着管道传递的顺序渲染的,所以我们需要首先从相机渲染进一步的多边形以获得正确的遮挡效果(稍后更接近的面)。
A在B上 ≠ B在A上
让我们考虑一下一个物体同时具有不透明和半透明表面的情况。

  • 不透明的面阻挡其后面的所有多边形,它会影响深度缓冲区。
  • 半透明面不应影响深度缓冲区。

为了正确渲染这个对象,我们需要首先对多边形进行排序以消除顺序依赖性。

组合图像

我们有时候会在视频中看到淡入淡出(crossfade)的效果,以使场景顺利过渡到下一个场景。我们也可以在这里使用 alpha 混合! Crossfade的过程相当于线性插值。
t 是介于 0 和 1 之间的权重
当t为0.6时,
image.png
然而,在许多情况下,加法不足以混合图像,在电影制作中,他们需要额外的技术:

  • 前景和背景分开拍摄。
  • 当他们拍摄前景时,他们会用 Choramkey 背景来拍摄。

我们如何以数字方式做到这一点?

二值图像掩模

与模板缓冲区一样,使用掩模,我们可以将前景与背景分开。
image.png
但是我们可以在这里能看到一些锯齿。

解决此问题的一种方法是根据前景和背景之间的边界插入颜色。
image.png
对于边界上的每个像素,我们可以确定前景与背景的面积比。

另一种方法称为“alpha合成”,它存储覆盖的像素部分(称为 alpha)。
image.png

另一个混合的例子

雾效果

我们也可以使用混合功能来模拟雾效果!

  • C`:新的目标因子
  • f : 雾因子
  • Cs :源颜色
  • (1-f):目标因子
  • Cf : 雾颜色

混合等式:C` = f * Cs + (1-f) Cf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络爬虫--20.【Scrapy-Redis实战】分布式爬虫获取房天下--代码实现

文章目录一. 案例介绍二.创建项目三. settings.py配置四. 详细代码五. 部署1. windows环境下生成requirements.txt文件2. xshell连接ubuntu服务器并安装依赖环境3. 修改部分代码4. 上传代码至服务器并运行一. 案例介绍 爬取房天下(https://www1.fang.com/&#xff…

同一台电脑安装python2python3

【安装之前,先了解一下概念】 python是什么? Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。 Python是纯粹的自由软件, 源代码和解释器CPytho…

程序员的常见健康问题

其实这些问题不仅见于程序员,其他长期经常坐在电脑前的职场人士(比如:网络编辑、站长等),都会有其中的某些健康问题。希望从事这些行业的朋友,对自己的健康问题,予以重视。以下是全文。 我最近…

网络爬虫--21.Scrapy知识点总结

文章目录一. Scrapy简介二. Scrapy架构图三. Scrapy框架模块功能四. 安装和文档五. 创建项目六. 创建爬虫一. Scrapy简介 二. Scrapy架构图 三. Scrapy框架模块功能 四. 安装和文档 中文文档:https://scrapy-chs.readthedocs.io/zh_CN/latest/intro/tutorial.html …

Ubuntu将在明年推出平板及手机系统

4月26日下午消息,知名Linux厂商Canonical今天正式发布Ubuntu 12.04版开源操作系统。Ubuntu中国首席代表于立强透露,针对平板电脑的Ubuntu操作系统将在明年推出。 Ubuntu 12.04版开源操作系统发布 Ubuntu操作系统是一款开源操作系统,主要与OE…

Android Studio 超级简单的打包生成apk

为什么要打包: apk文件就是一个包,打包就是要生成apk文件,有了apk别人才能安装使用。打包分debug版和release包,通常所说的打包指生成release版的apk,release版的apk会比debug版的小,release版的还会进行混…

推荐16款最棒的Visual Studio插件

Visual Studio是微软公司推出的开发环境,Visual Studio可以用来创建Windows平台下的Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和Office插件。 本文介绍16款最棒的Visual Studio扩展: 1. DevColor Extension…

网络爬虫--22.【CrawlSpider实战】实现微信小程序社区爬虫

文章目录一. CrawlSpider二. CrawlSpider案例1. 目录结构2. wxapp_spider.py3. items.py4. pipelines.py5. settings.py6. start.py三. 重点总结一. CrawlSpider 现实情况下,我们需要对满足某个特定条件的url进行爬取,这时候就可以通过CrawlSpider完成。…

怎么安装Scrapy框架以及安装时出现的一系列错误(win7 64位 python3 pycharm)

因为要学习爬虫,就打算安装Scrapy框架,以下是我安装该模块的步骤,适合于刚入门的小白: 一、打开pycharm,依次点击File---->setting---->Project----->Project Interpreter,打开后,可以…

xpath-helper: 谷歌浏览器安装xpath helper 插件

1.下载文件xpath-helper.crx xpath链接:https://pan.baidu.com/s/1dFgzBSd 密码:zwvb,感谢这位网友,我从这拿到了 2.在Google浏览器里边找到这个“扩展程序”选项菜单即可。 3.然后就会进入到扩展插件的界面了,把下载好的离线插件…

网络爬虫--23.动态网页数据抓取

文章目录一. Ajax二. 获取Ajax数据的方式三. seleniumchromedriver获取动态数据四. selenium基本操作一. Ajax 二. 获取Ajax数据的方式 三. seleniumchromedriver获取动态数据 selenium文档:https://selenium-python.readthedocs.io/installation.html 四. sele…

gcc g++安装

2019独角兽企业重金招聘Python工程师标准>>> 安装之前要卸载掉老版本的gcc、g sudo apt-get remove gccgcc-xx #可能有多个版本,都要删掉 sudo apt-get remove g sudo apt-get install gcc 安装g编译器,可以通过命令 sudo apt-get installb…

网络爬虫--24.【selenium实战】实现拉勾网爬虫之--分析接口获取数据

文章目录一. 思路概述二. 分析数据接口三. 详细代码一. 思路概述 1.拉勾网采用Ajax技术,加载网页时会向后端发送Ajax异步请求,因此首先找到数据接口; 2.后端会返回json的数据,分析数据,找到单个招聘对应的positionId…

bzoj 1999: [Noip2007]Core树网的核【树的直径+单调队列】

我要懒死了&#xff0c;所以依然是lyd的课件截图 注意是min{max(max(d[uk]),dis(u1,ui),dis(uj,un))}&#xff0c;每次都从这三个的max里取min #include<iostream> #include<cstdio> using namespace std; const int N500005; int n,m,h[N],cnt,d[N],s,t,mx,f[N],a…

Java 设计模式-【单例模式】

单例解决了什么问题&#xff1a;为了节约系统资源&#xff0c;有时需要确保系统中某个类只有唯一一个实例&#xff0c;当这个唯一实例创建成功之后&#xff0c;我们无法再创建一个同类型的其他对象&#xff0c;所有的操作都只能基于这个唯一实例。为了确保对象的唯一性&#xf…

网络爬虫--26.Scrapy中下载器中间件Downloader Middlewares的使用

文章目录一. Downloader Middlewares二. 设置随机请求头三. ip代理池中间件一. Downloader Middlewares 二. 设置随机请求头 三. ip代理池中间件

解决eclipse配置Tomcat时找不到server选项(Mars.2也可用)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 集成Eclipse和Tomcat时找不到server选项&#xff1a; 按照网上的步骤如下&#xff1a; 在Eclipse中&#xff0c;窗口(window)——首选项…

网络爬虫--27.csv文件的读取和写入

文章目录一. csv文件二. 读取csv文件的两种方式三. 写入csv文件的两种方式一. csv文件 二. 读取csv文件的两种方式 import csvdef read_csv_demo1():with open(classroom1.csv,r,encodingutf-8,newline) as fp:# reader是一个迭代器reader csv.reader(fp)next(reader)for x i…

Quiver快速入门

Quiver快速入门 装载自&#xff1a;https://github.com/HappenApps/Quiver/wiki/Quiver%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8Quiver 是一个程序员专用的记事本应用&#xff0c;可轻松混合文本、代码、Markdown、LaTeX 到一个记事本中。提供强大的代码编辑功能&#xff0c;以及…