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

news2024/11/24 3:40:37

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

什么是缓冲区?

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

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

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

  • 分辨率:宽度(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.coloradmin.cn/o/1333275.html

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

相关文章

自学SLAM(9)《第五讲:特征点法视觉里程计》作业

文章目录 1.ORB特征点1.1 ORB提取1.2 ORB描述1.3 暴力匹配1.4 最后,请结合实验,回答下⾯⼏个问题 2.从 E 恢复 R,t3.用 G-N 实现 Bundle Adjustment4.* 用 ICP 实现轨迹对齐 1.ORB特征点 1.1 ORB提取 ORB(Oriented FAST and BRIEF) 特征是 S…

插入排序之C++实现

描述 插入排序是一种简单直观的排序算法。它的基本思想是将一个待排序的数据序列分为已排序和未排序两部分,每次从未排序序列中取出一个元素,然后将它插入到已排序序列的适当位置,直到所有元素都插入完毕,即完成排序。 实现思路…

外星人Alienware Area-51 R2原厂Win10预装系统

大三角外星人Area 15 R2原装出厂WINDOWS10系统 链接:https://pan.baidu.com/s/1JwDuHx1j7fRABtIpLmKW_g?pwdq4pd 提取码:q4pd 原厂系统自带所有驱动、外星人出厂主题壁纸、专属LOGO标志、Office办公软件、MyAlienware、外星人控制中心等预装程序 文…

T-Dongle-S3开发板信息

相关学习网站 ESP32保姆级教程开始学习ESP32_哔哩哔哩_bilibili Wokwi - Online ESP32, STM32, Arduino Simulator T-Dongle-S3 资料:https://spotpear.cn/index/study/detail/id/1069.html 主控芯片: ESP32-S3 Xtensa 芯片集成了 Xtensa 32 位 LX7 双核处理器…

如何用Python画坤坤?

前言 最近闲得慌,突然想起坤坤了,那就画一个吧。 一、Python画坤坤 坤坤大家都熟悉不过了,也就是蔡徐坤。 代码: from turtle import * from math import * #高级椭圆参数方程(颜色),sita为…

[java] 注释

目录 单行注释: 多行注释: 文档注释: doc标签 单行注释: 多行注释: 注意多行注释不能嵌套多行注释: 文档注释: 注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档,一般写在类。 doc标签 标签 描述 示例 …

[论文阅读笔记28] 对比学习在多目标跟踪中的应用

这次做一篇2D多目标跟踪中使用对比学习的一些方法. 对比学习通过以最大化正负样本特征距离, 最小化正样本特征距离的方式来实现半监督或无监督训练. 这可以给训练MOT的外观特征网络提供一些启示. 使用对比学习做MOT的鼻祖应该是QDTrack, 本篇博客对QDTrack及其后续工作做一个总…

设计模式--命令模式

实验16:命令模式 本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解命令模式的动机,掌握该模式的结构; 2、能够利用命令模式解决实际问题。 [实验任务]:多次撤销和重复的命令模式 某系…

算法学习系列(十):用数组模拟链表、双链表、栈、队列、单调栈、单调队列

目录 引言一、数组模拟链表1.模板2.例题3.测试 二、数组模拟双链表1.模板2.例题3.测试 三、数组模拟栈1.模板2.例题3.测试 四、数组模拟队列1.模板2.例题3.测试 五、数组模拟单调栈1.例题模板2.测试 六、数组模拟单调队列1.例题模板2.测试 引言 首先说一下为什么要拿数组来模拟…

用户认证篇

文章目录 1. 如何生成用户认证token令牌1.1 相关表1.2 生成令牌逻辑1.3 最终结果 2. 如何认证用户token令牌2.1 前端组件2.2 TokenAuthenticationFilter2.3 获得登陆用户 3. 如何刷新用户认证 Token 令牌3.1 前端组件3.2 刷新令牌接口 4. 如何模拟用户认证token令牌5. 如何实现…

车手互联是不是杀手锏,来听听一家头部手机厂的座舱方法论

作者 |Amy 编辑 |德新 十年前, 苹果CarPlay和谷歌Android Auto相继推出,手机与车机两个此前貌似无关的品类,从此开始产生交集。 科技巨头看好车机的硬生态,汽车大鳄们则垂涎于科技圈的软实力。 CarPlay和Android Auto的出现&am…

Chainlink 开发者故事:Krypton 从构思到产品的 Chainlink BUILD之旅

识别问题,构思解决方案,建立它,推出它,然后扩展它。这就是科技初创企业的操作手册。 现在,前Chainlink黑客马拉松获奖者,当前的Chainlink BUILD成员Krypton已经进行到了第四步:推出。Krypton团…

【MCAL】TC397+EB-treso之MCU配置实战 - 芯片时钟

本篇文章介绍了在TC397平台使用EB-treso对MCU驱动模块进行配置的实战过程,主要介绍了后续基本每个外设模块都要涉及的芯片时钟部分,帮助读者了解TC397芯片的时钟树结构,在后续计算配置不同外设模块诸如通信速率,定时器周期等&…

改进YOLOv8注意力系列三:结合CrissCrossAttention、ECAAttention、EMAU期望最大化注意力

改进YOLOv8注意力系列三:结合CrissCrossAttention、ECAAttention、EMAU期望最大化注意力 代码CrissCrossAttention注意力ECAAttention通道注意力EMAU期望最大化注意力加入方法各种yaml加入结构本文提供了改进 YOLOv8注意力系列包含不同的注意力机制以及多种加入方式,在本文中…

LINUX系统安装和管理

目录 一.应用程序 对比应用程序与系统命令的关系 典型应用程序的目录结构 常见的软件包装类型 二.RPM软件包管理 1.RPM是什么? 2.RPM命令的格式 查看已安装的软件包格式 查看未安装的软件包 3.RPM安装包从哪里来? 4.挂载的定义 挂载命令moun…

设计模式--外观模式

实验12:外观模式 本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解外观模式的动机,掌握该模式的结构; 2、能够利用外观模式解决实际问题。 [实验任务]:计算机开启 在计算机主机(Main…

带您了解目前AI在测试领域能够解决的那些问题

AI在测试领域主要应用场景 话不多说,直接给结论: 接口测试脚本的自动生成和校验(依赖研发ai工具)测试用例的自动生成UI自动化测试脚本的自动生成和校验测试文档的自动生成快速了解初涉的业务领域 关于ai对研发和测试的整体影响…

简析七款无线话筒电路图

简易无线话筒电路图(一) 无线话筒线圈L1匝间距离变近和换容量大一点的电容关联会使发射频率变低;要使发射频率变高,就需要采取相反的措施。和L1并联的电容变化范围不可以太大和太小,否则发射频率会偏到离谱,甚至不会产…

ubuntu docker 进入容器内使用ping 指令,提示bash: ping: command not found问题

解决方法 #更新软件列表 apt update #安装 ping 工具iputils-ping apt install -y iputils-ping #最后使用ping一下容器ping 172.18.0.3欢迎关注我的公众号“点滴分享技术猿”,原创技术文章第一时间推送。

CnosDB:深入了解时序数据处理函数

CnosDB 是一个专注于时序数据处理的数据库,旨在解决时序数据存储与分析问题,为用户提供高效的时序数据管理与查询便利。为了实现这一目标,CnosDB 实现了一系列专用函数,快来和CC一起来看看吧! CnosDB:深入了…