计算机图形学 | 实验十二:混合(透明物体处理)

计算机图形学术语(个人收集整理)  光栅化: 把景物模型数学描述集色彩信息转换至计算机屏幕上的像素,这个过程称为光栅化 3D三维(three dimension)。客观世界中静止的物体都是三维的,在计算机图形学中常在一定的坐标系中用(x,y,z)坐标系列表示物体。3D modeling3D建模。用三维坐标来描述物体的形状。在各种计算机图形应用领域中有不同的三维建模方法,用不同的算法来描述这些领域中的物体和对象。3D tra 阅读详情

华中科技大学《计算机图形学》课程

MOOC地址:计算机图形学(HUST)

计算机图形学 | 实验十二:混合(透明物体处理)

混合(Blending)

首先介绍一下OpenGL中混合的基本概念。混合是实现物体透明的一种技术。当一个物体时透明的,我们看到的颜色是物体本身的颜色和它背后其它物体的颜色的混合。例如,一个有色玻璃窗是一个透明的物体,玻璃有它自己的颜色,但我们看玻璃所看到的的最终的颜色还包含了玻璃之后所有物体的颜色。

开启混合和设置混合模式

和OpenGL大多数的功能一样,我们可以启用GL_BLEND来启用混合。

// 开启混合
glEnable(GL_BLEND);

启用了混合之后,我们还需要告诉OpenGL如何混合

//设置混合的源和目标因子
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

上面的代码设置混合的源和目标因子,这里使用源颜色向量(纹理图片的不透明度值)的 alpha 作为源因子,使用 1−alpha 作为目标因子。这样绘制出来的物体的最终颜色 = 纹理的颜色向量 × alpha + 颜色缓冲中的颜色向量 ×(1-alpha)。

在这里插入图片描述

绘制顺序

在绘制一个有不透明和透明物体的场景的时候,必须遵循如下原则:

  1. 先绘制不透明物体;
  2. 后绘制透明物体:需要按距离摄像头(视点)由远到近的顺序绘制所有透明的物体。

思考一下为什么需要按距离摄像头(视点)由远到近的顺序绘制所有透明的物体?

原因1:如果先绘制近的物体,后绘制远的物体时,远物被近物相应被遮挡的片段因为深度测试而被丢弃。会出现如图2的错误结果。

在这里插入图片描述

原因2:在关闭深度测试情况下,混合得到的颜色也不对。会出现如图3的错误结果。

在这里插入图片描述

排序透明物体

通过需要绘制的物体和摄像头的距离distance来对物体进行从大到小排序,这里使用c++的map容器来实现,定义一个map<key,value>对象,key的值使用会物体和摄像头的距离distance,value的值存储物体的坐标,map会自动根据键的值对元素进行从小到大排序,之后我们只需要反向遍历map,就可以按照由远及近的顺序取到物理的位置值。

std::map<float, glm::vec3> sorted;
for (unsigned int i = 0; i < windows.size(); i++)
{
	float distance = glm::length(camera.Position - windows[i]);
	sorted[distance] = windows[i];
}

绘制

在绘制循环中,先绘制不透明的物体(箱子和地板)。最后按照距离摄像头由远到近的顺序绘制透明的物体window。

因为sorted这个map中的元素是按照从小到大的顺序排序,所有需要使用反向迭代器从后往前,按照物体和摄像头之间距离从大到小的顺序遍历map。

for (std::map<float, glm::vec3>::reverse_iterator it = sorted.rbegin(); it != sorted.rend(); ++it)
{
	model = glm::mat4(1.0f); 
	model = glm::translate(model, it->second); 
	shader.setMat4("model", model); 
	glDrawArrays(GL_TRIANGLES, 0, 6); 
}

实验结果

实验的最终结果如图所示:

开启混合:

在这里插入图片描述

关闭混合:

在这里插入图片描述

深入解析Duff-Porter Alpha混合技术:图形学透明合成基石 Alpha混合是一种基于Alpha通道控制像素透明度的图像合成技术,其通过为每个像素引入一个额外的Alpha值(通常范围为0到1),表示该像素的不透明程度。当源图像与目标图像叠加时,Alpha值决定两者颜色的加权融合比例,实现平滑的透明或半透明视觉效果。数学上,最基本的Over操作可表示为:其中 $ C_{\text{out}} $ 为输出颜色,$ C_s $ 和 $ C_d $ 分别为源与目标颜色,$ \alpha_s $ 为源Alpha值。 阅读详情

相关推荐

透明图像处理技术与应用实践

本文还有配套的精品资源,点击获取 简介:透明图像处理是计算机图形学的关键领域,涵盖了图像显示、编辑和视觉效果实现。本实践教程探讨了透明图像在GUI、网页、游戏设计中的应用,以及Alpha通道、混合模式、图像库API、CSS3/HTML5、性能优化和动画交互等关键知识点。通过阅读"透明图像处理.txt"、"TransparentImageTest"和"说明.htm"文件,开发...

weixin_42360846的博客 1554

Opengl glBlendFunc,颜色混合公式,FrameBuffer混合颜色不正确,预乘alpha总结

Opengl glBlendFunc,颜色混合公式,FrameBuffer混合颜色不正确,预乘alpha总结

m0_58186648的博客 855

计算机图形学实验报告

1、 实验一:橡皮筋技术的实现 (1、了解 C++.NET 开发基于 OPENGL 的图形应用程序的步骤。 2、了解 OPENGL 的流水线。 3、学习鼠标、键盘交互技术。 4、实现二点定矩形的橡皮筋技术。 ) 2、 实验二:定义四面体和填充图案 (1、通过段,定义四面体。 2、定义填充图案。 3、了解OPENGL反走样技术。 4、通过菜单,填充的、线框的正交观察四面体。 ) 3、 实验三:四面体的几何变换 (定义多视区。 定义基于视区的三维正交观察可视体。 通过鼠标或键盘,实现交互控制四面体的旋转几何变换。 ) 4、 实验四:三视图正交投影和透视投影 (1、设置照相机的位置,实现“正视图XOZ(V)”、“侧视图YOZ(W)”和“俯视图XOY(H)”正交观察四面体。 2、通过段,定义三维坐标,并显示轴的标志。 3、定义三维透视观察可视体,利用键盘上、下、左、右功能键,交互控制 照相机的位置,透视观察四面体。 )

图形学初识--颜色混合

本章节补充一下颜色混合的内容,主要包含:为什么要有颜色混合?颜色混合常实现方式?

航行的土豆的博客 1330

计算机图形学实验

大学计算机图形学基础实验,包扩直线,圆,椭圆,绘制,交互式直线,圆,椭圆,绘制。裁剪算法,填充算法,B样条曲线绘制

Delphi 12.3 精简绿色版下载

Delphi精简绿色版基于原版安装,去掉了InterBase、法语、德语、日语,只保留了Delphi Windows 32和Delphi Windows 64桌面开发,其余部分未做任何修改。Delphi精简绿色版不含任何破解,仅供学习和研究,24小时后请自行删除,如需继续使用Delphi,请购买正版。绿色版基于原版安装,未做任何精简和修改。绿色版不含任何破解,仅供学习和研究,24小时后请自行删除,如需继续使用RAD Studio,请购买正版。

全粘工程师 4311

计算机图形学实验七定义一个简单形体(OpenGL提供的基础形体,如立方体、球体等),并生成正交投影及透视投影视图

在本实验中,我才用自定义点的坐标,调用OpenGL库中的glVertex3fv函数进行立方体图形的绘制,针对两种投影方式(正交投影和透视投影),我定义了两种绘制窗口的函数,这样针对用户不同的选择,可以选择生成不同绘制窗口。关于调整观察姿态及位置(调整相机位置、姿态等)的问题,我采用鼠标拖动和鼠标点击检测的回调函数,这样随着鼠标的拖动和点击,就可以改变图形的坐标进而重新绘制图像渲染到窗口上,就可以实现利用鼠标拖动来调整观察姿态及位置。正交投影和透视投影均放了两张图,是鼠标拖动后的不同观察效果。

weixin_53249260的博客 1399

用PyTorch和snnTorch库5分钟搞定一个脉冲神经网络(SNN)手写数字识别Demo

本文详细介绍了如何使用PyTorch和snnTorch库快速搭建一个脉冲神经网络(SNN)手写数字识别Demo。通过模拟生物神经元的脉冲发放机制,SNN在低功耗场景中展现出独特优势。文章涵盖环境配置、数据预处理、模型构建、训练评估全流程,并提供了性能优化技巧和常见问题解决方案,帮助开发者在5分钟内实现高效的SNN应用。

weixin_29300931的博客 393

术语解释计算机图形学,《计算机图形学》名词术语解释

相关计算机图形学《计算机图形学》名词术语解释alpha 在颜色红、绿、兰( R 、 G 、 B )之后添加的第 4 个颜色值,用于提供对象颜色的透明度。当它的值为 0.0 时,就意味着完全 透明,为 1.0 时表示不透明。 环境光 (Ambient light) 场景中的光线,它并非来自特定的点源和方向。外围光说明所有曲面都很平坦,而且位于所有的边上。反走样 (Anti-aliasing) 用...

weixin_33895652的博客 516

Ubuntu 22.04下Nvidia显卡驱动安装全攻略:从PPA源到避坑指南

本文详细介绍了在Ubuntu 22.04系统下安装Nvidia显卡驱动的完整流程,包括PPA源的使用、旧驱动清理、安装后验证及常见问题解决方案。特别针对机器学习开发者和图形设计师,提供了从基础安装到性能调优的全方位指南,帮助用户避免常见安装陷阱并优化GPU性能。

weixin_29213655的博客 382

基于计算机视觉的无人便利店技术:从算法到部署的系统化实战指南

摘要:本文系统介绍了基于计算机视觉的无人便利店技术方案,提出"商品检测-跟踪-动作识别-防损-结算"五段式流水线架构。详细阐述了YOLOv8-Seg商品检测、OC-Sort多目标跟踪、3D-CNN+ST-GCN动作识别等核心算法实现,并完成NVIDIA Jetson Xavier NX边缘端的优化部署。通过TensorRT量化、DeepStream加速等技术手段,系统在保持94.7%动作识别准确率的同时,将漏单率降至0.8%,单店云端算力成本较行业平均降低84%。所有代码已开源,可直接应

博客 627

入门图形学:透明原理

因为我们后面要大量使用透明效果(或者说透明效果是实现我们需要的着色特效的基础部分),所以这里就来非常通俗详细说一下透明的原理。 先来从最简单易懂的二维层面来讲解。 我猜大家使用最常见的透明效果就是在ui中使用.png(带有透明通道)的sprite吧,我们在ps中通过背景透明的模板文件制作保存的.png图片就是这个了,.png的图片在rgb三通道分量之外还附带一个a...

羊羊的博客 8994

226届数字IC秋招笔试面试全攻略

本文系统介绍了数字IC设计岗位面试的核心技巧,聚焦三大关键环节:自我介绍、项目介绍和技术问题回答。在自我介绍部分,强调1-2分钟结构化表达,突出与岗位匹配的技能和量化成果;项目介绍环节提出"背景-职责-技术-难点-成果"五步框架,建议结合架构图和性能数据展示技术深度;技术问题回答策略包括理解问题、结构化思考、举例说明和诚实应对未知。文章还提供了项目包装方法,指导如何通过量化数据、架构创新展示和技术难点解决方案来突出项目亮点,并附有简历项目描述示例和技术问题回答模板,帮助面试者全方位展示专

2301_79143213的博客 1063

Unity透明物体渲染原理概述

深度测试 对某个片元进行深度测试: 比较该片元已经存在于深度缓冲区中的深度值,如果当前片元比深度缓存中的深度值距离摄像机更远,说明该片元是被遮挡的,无需参与合并,也就是说这个片元没有通过深度测试。 什么是合并: 合并决定了通过深度测试的片元的颜色如何写入到颜色缓存中,如果是不透明物体,直接覆盖掉原来的颜色即可,反之就要和原本颜色缓存中的颜色进行混合后写入。 Unity 的渲染流水线中,采用了 Early-Z 技术,即在片元着色器之前进行深度测试,提前知道那些片元是舍弃的,对于舍弃的片元,无需再使用片元着色器

ZHurric的博客 3010

AutoJs调用DeepSeek大模型接口实战教程 AutoJs接入DeepSeek、 DeepSeek API调用 、 手机脚本接入大模型

通过这篇文章,我们用 AutoJs 成功接入了 DeepSeek Chat API。使用发送请求在 Header 里正确携带 API Key从里拿到最终返回结果这样一来,你就可以在 AutoJs 里实现一个智能助手脚本,甚至做更复杂的 AI 自动化工具。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 476

【HALCON工业视觉应用探索】08. C#+Halcon视觉引导机器人抓取:从入门到工业级实战(附完整代码+部署指南)

摘要:本文聚焦C#+Halcon在视觉引导机器人抓取领域的落地应用,从新手友好的“二十分钟基础引导系统”切入,逐步深入工业级场景(汽车变速箱壳体抓取)。内容涵盖核心概念(手眼标定原理、坐标转换、机器人通信协议)、完整技术流程(图像采集→目标定位→标定转换→机器人执行→结果反馈)、工业级代码实现(多目标识别、智能抓取策略、实时状态监控),以及现场部署关键技巧(硬件选型、通信配置、精度优化)。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1266

计算机图形学

计算机图形学

ProgramNovice的博客 662

2026 年 3 月青少年软编等考 C/C++ 三级测试题解析

摘要 本文包含三部分内容: 单选题(10题):考察C++基础语法和数据结构知识,涉及vector、栈、队列的操作和特性。 判断题(10题):测试对动态数组、栈、队列、字符串操作的理解,包括内存管理、访问方式和函数返回值等。 编程题(1题):模拟火车站售票窗口排队场景,要求根据输入输出各窗口的排队情况,重点考查队列的实际应用和边界条件处理。 答案解析详细,涵盖常见编程考点,适合检验基础知识的掌握程度。

发布少儿编程考级的真题和优秀竞赛题解析,以及一些讲义。 253

图形学-透明度

图形学-透明度基本原理深度测试深度冲突防止深度冲突透明度测试透明度混合渲染顺序的重要性 基本原理 对于不透明的物体,不需要考虑他的渲染顺序也能得到正确的排序结果,这是由于深度缓冲(depth buffer 或 z-buffer)的存在。在实时渲染中,深度缓冲是用于解决可见性的问题的,它可以决定物体的那些部分会被渲染在前面,而那些部分会被其他物体遮挡。 他的基本思想是:根据深度缓冲中的值来判断该片元距离摄像机的距离,当渲染一个片元时,需要把他的深度值(就是距离摄像机的远近,0-1之间)和已经存在于深度缓冲中的

qq_44512151的博客 926

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

图形学笔记(七) 色彩与混合

色彩与混合 色彩空间 人眼有什么样的生理特征? 了解眼睛的生理特点可以帮助我们更好地掌控图形系统地设计。例如,眼睛受限于可查觉的最小亮度和最小分辨率。如果显示器像素可显示的亮度等级小于人眼可察觉的最小亮度差,或者其像素对人眼所张视角为眼睛最小角度分辨率二的1/10,那么该显示器的复杂性就超出了必要。 人类视觉系统有强大的并行处理能力,这使得用户能接受从计算机传来的大量信息。视觉系统一方面可容纳简陋或粗糙的数据,如简笔画,但另一方面又对特定瑕疵极为敏感,能在数百万像素中找到错误的那一个。 视觉系统可以很好地完

by UPiracy 4227

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

缓冲区是保存某些数据的临时存储空间。为什么我们需要缓冲区?原因很简单,当数据量很大时,因为计算机无法同时处理整个数据,因此在处理当前数据集时需要额外的空间来存储其余数据。在计算机图形学中,缓冲区有多种定义方式。分辨率:宽度(n) x 高度(m)深度(或精度):k位数/像素例如,如果我们想要每个像素使用 RGB 通道,则一个通道需要 8 位,总共 24 位(3 x 8 位)。

1774

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

透明混合渲染顺序机制

一、首先来说一下计算机如果解决可见性问题: 两个步骤:1.深度测试。2.深度写入。两个步骤都可控制是否开启、关闭。 在一个片元A进行渲染的时候,首先进行深度测试,用A的深度值Za与深度缓冲中的深度值Zz进行比较,如果Za &gt; Zz说明A离摄像机更远,则A的颜色值和深度值不会写入到颜色缓冲和深度缓冲中。 以上是物体A开启了深度测试和深度写入的情况下的工作流程,如果要实现透明效果,则复杂了...

younne0915的博客 1847

SDMatte透明物体模式算法解析:基于物理渲染的半透明材质建模思路

本文介绍了如何在星图GPU平台上自动化部署SDMatte镜像,实现高质量透明物体抠图功能。该镜像采用基于物理渲染的半透明材质建模方法,特别适用于处理玻璃、薄纱等复杂材质的图像抠图需求,可广泛应用于电商产品展示、影视后期制作等场景。

weixin_31749299的博客 620

计算机图形学入门(九)-几何(基本表示方法:隐式和显式)

本部分主要介绍了几何在一些实例中的应用,以及面临的挑战。之后主要介绍了两大类主要的几何表示方法:隐式类和显式类,并分别列举了当前图形学常用的隐式和显式的具体方法。

weixin_45314475的博客 6493

stage3D 搭建2d图形引擎 (三)透明度(alpha混合)

目前为止我们绘制的显示对象的颜色都还是没有考虑透明度的,为了给我们的显示对象增加透明度这一特性,我们需要深入了解透明度的本质。 所谓的透明度并不是真实世界中的那种透明,真实世界中的透明是物体发射或者反射的光线透过了物体和我们之间的障碍物,从而我们能够看见障碍物另一侧的物体。但是计算机世界中一切的显示都是虚拟的,所以不存在光线透过的问题。计算机图形学中的透明度实际上是通过两者的颜色混合而...

weixin_30425949的博客 304
上一篇: 计算机图形学 | 有趣的测试和合并——片元操作
下一篇: Leetcode1763. 最长的美好子字符串
UestcXiye
博客等级 码龄8年 9032粉丝 1306原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值