计算机图形学理论(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,一经查实,立即删除!

相关文章

解决:Every derived table must have its own alias

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 报错: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Every derived table must have its own alias 解决&…

网络爬虫--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…

程序员的常见健康问题

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

Java中BufferedReader和InputStreamReader

BufferedReader 类BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,而且提供了很实用的readLine,读取一个文本行,从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。…

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

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

Spring 定时任务的几种实现

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整…

trie树(字典树)

trie树学习 学习trie树 转载于:https://www.cnblogs.com/cjoierljl/p/9317023.html

Vue 教程第四篇—— Vue 实例化时基本属性

实例元素 el 实例元素指的是 Vue 实例化时编译的容器元素&#xff0c;或者说是 Vue 作用的元素容器 <div id"app"></div> var vm new Vue({el: #app}) 也可以为实例元素指定其它选择器 <div class"app"></div> var vm new Vue({…

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

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

scrapy框架异常--no more duplicates will be shown (see DUPEFILTER_DEBUG to show all duplicates)

解决方法&#xff1a; https://blog.csdn.net/qq_40176258/article/details/86527568 https://blog.csdn.net/weixin_39946931/article/details/88390797 谢谢博主分享&#xff01;

【BZOJ3590】[Snoi2013]Quare 状压DP

题解&#xff1a; 一道比较水的题 但这个测试数据极弱我也不知道我的代码正确性是不是有保证 构成一个边双联通 可以由两个有一个公共点的边双联通或者一个边双加一条链构成 所以我们需要要预处理出所有环 令f[i][j][k]表示起点为i&#xff0c;终点为j&#xff0c;经过点的状态…

java swing简介

UI 组件简介 在开始学习 Swing 之前&#xff0c;必须回答针对真正初学者的一个问题&#xff1a;什么是 UI&#xff1f;初学者的答案是“用户界面”。但是因为本教程的目标是要保证您不再只是个初学者&#xff0c;所以我们需要比这个定义更高级的定义。 所以&#xff0c;我再次…

定时任务 cron 表达式详解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 &#xff08;Spring定时任务的几种实现&#xff1a;见博客另一页&#xff1a;http://blog.csdn.net/jiangyu1013/article/details/54405…

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

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

推荐16款最棒的Visual Studio插件

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

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

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

可以生成自动文档的注释

使用/**和*/可以用来自动的生成文档。 这种注释以/**开头&#xff0c;以*/结尾

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

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