计算机图形学 | 有趣的测试和合并——片元操作

计算机图形学基础:渲染管线与光照模型 渲染管线是一个分阶段的处理过程,它将三维场景转换为二维图像。应用阶段(Application Stage):处理场景数据,如几何变换、摄像机设置等。几何阶段(Geometry Stage):处理顶点数据,包括顶点着色、图元装配、裁剪和光栅化。光栅化阶段(Rasterization Stage):将图元转换为像素,进行片段着色和深度测试。输出合并阶段(Output-Merger Stage):合并片段颜色,进行混合、抖动等操作,最终生成图像。光照模型描述了物体表面如何与光交互,从而影响其外观。 阅读详情

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

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

计算机图形学 | 有趣的测试和合并——片元操作

10.1 再看片元操作

片元操作

在这里插入图片描述

几何阶段:

在这里插入图片描述

光栅化阶段:

在这里插入图片描述

几个重要的缓冲区

  • 颜色缓存(Color Buffer/Pixel Buffer):颜色缓存存储每个像素点的颜色值。
  • 模板缓存(Stencil Buffer):模板缓存存储了一个模板,比如可以设定模板上对应点为1的像素点才会被显示出来。
  • 深度缓存(Depth Buffer):深度缓存存储每个像素点的深度信息,也就是Z坐标值。深度值规范到0.0~1.0之间。
  • 累计缓存(AccumulationBuffer):与颜色缓冲类似,同样储存像素点的颜色值。
    用途:合成多幅图像,实现在场景中“多重曝光(multipleexposures)”。
    方法:通过将图像渲染多次,对场景位置(戒所选的物体)进行微小的、渐增的改变,然后累积结果。
    效果:提高图像的真实性,产生反走样、运动模糊(多幅有微小位移的图像的合成)等效果。

在这里插入图片描述

在这里插入图片描述

什么是颜色混合?

当A(实际上是α系数,Alpha Coeefficient)不为1.0f,即颜色有一定透明度时,可以进行颜色混合(Color Blending)。

在这里插入图片描述

颜色混合的应用:

  • 透明物体
  • 处理某些特效:如运动模糊
  • 处理某些特效:如泛光效果Bloom

GPU的双重缓冲(Double Buffering):

在这里插入图片描述

10.2 谁遮住了我?

消隐的概念

消隐:决定场景中哪些物体的表面是可见的,哪些是被遮挡不可见的。

在这里插入图片描述

面剔除

正反面的定义:

在这里插入图片描述

如果Vview∙N>0则该多边形为后向面,后向面是不可见的。

在这里插入图片描述

什么时候做面剔除?

在片元着色之前进行面剔除。

深度测试

深度缓存(Depth Buffer)存储每个片元的深度信息,也就是Z坐标值。

深度缓冲器算法(Z-buffer算法)

算法思想:对每个像素点找到距离视点最近的片元。

在屏幕空间中:其实是最靠近坐标屏幕的片元,也就是z值最小的片元。这个片元的颜色值就是这个像素点的颜色值。

在这里插入图片描述

算法步骤:

  1. 初始化:将深度缓存与帧缓存中的所有单元(x,y)初始化:
    深度缓存中各(x,y)单元置为z的最大值1DepthBuffer(x,y )= 1
    帧缓存中各(x,y)单元颜色值置为背景色FrameBuffer(x,y )= BackgroudColor

  2. 处理场景中的每一多边形,每次一个:
    计算多边形的上各点(x,y)的深度值z若z<depthBuff(x,y)则depthBuff (x,y) = z;
    取得该多边形表面的颜色值surfColor (x,y);
    frameBuff (x,y) = surfColor (x,y)

深度排序算法(depth sorting method)

深度排序算法(depth sorting method),又叫画家算法(painter’s algorithm)。

思想:画家在创作一幅油画时,总是先画背景,然后画较远处的场景,然后是近一点的物体,最后画最近的景物。

数据结构:

  1. 多边形队列M:存储所有多边形
  2. 优先级队列N:深度排序得到的结果,按优先级存放所有多边形

算法步骤:

  1. 深度排序:将多边形按深度优先级进行排序,结果存入队列N中
    距视点近的优先级高,距视点远的优先级低。
  2. 扫描转换:从队列N中逐个取出多边形进行绘制
    其实就是由优先级低的多边形开始,逐个对多边形进行扫描转换。

深度排序

Step 1.初始化
将场景中的所有多边形按zmax由大到小的顺序存入一个先进先出队列中,记为M;
同时初始化一空的先进先出队列N。

在这里插入图片描述

Step 2.只有一个多边形
若M中的多边形个数为1,则将M中的多边形直接加入到N中,同时将A从M中删除。

在这里插入图片描述

Step 3.有多个多边形
从当前M取出多边形B,对A与B进行判别:

在这里插入图片描述

情况1:若对M中任意的B均有zmax(B)<zmin(A),则说明A是M中所有多边形中深度最深的,它与其它多边形在深度方向上无任何重叠,不会遮挡别的多边形。将A按先进先出原则加入N中。

在这里插入图片描述

情况2:判别多边形A和B在xoy平面上投影的包围盒有无重叠。若无重叠,则A、B在队列中的顺序无关紧要。将A按先进先出原则加入N中。

在这里插入图片描述

情况3:判别平面A完全位于B上A与B的重叠平面之后将A按先进先出原则加入N中。

在这里插入图片描述

情况四:A有部分不在这个重叠面之后:判别B上平面A与B的重叠平面是否完全位于A之前。若是,将A按先进先出原则加入N中。

在这里插入图片描述

当A、B排好序了,继续处理其他的多边形从当前M取出多边形C:通过判别发现B遮挡了C的一部分,因此C的优先级最低。最后优先级由低到高的顺序为C、B和A。

在这里插入图片描述

扫描转换

从N中按照优先级顺序取出多边形进行绘制。

在这里插入图片描述

OpenGL中的消隐

面剔除

OpenGL中可以开启多边形剔除。

如:

glEnable(GL_CULL_FACE);
// mode可以是GL_FRONT、GL_BACK、GL_FRONT_AND_BACK
glCullFace(mode);
深度测试

深度测试默认是关闭的,所以如果要启用深度测试的话,我们需要GL_DEPTH_TEST选项来启用它。

如:

glEnable(GL_DEPTH_TEST);
计算机图形学(二) 渲染管线 渲染管线是指:在给定一个 3D 场景的几何描述及一架已确定位置和方向的虚拟摄像机时,根据虚拟摄像机的视角生成2D图像的一系列步骤 渲染管线的几个阶段 输入汇编器阶段 输入汇编器阶段:这个阶段的主要目的是从内存读取几何数据(顶点和索引)并 将这些数据组合为几何图元,构建多边形,主要有点、线段、三角形。给定顶点和索引,构建多边形的方法取决于所使用的基本图元的拓扑类型 使用自定义的顶... 阅读详情

相关推荐

OpenGL编程入门系列(三)——深度测试

作者:禅与计算机程序设计艺术 1.简介 深度测试(Depth Testing)是OpenGL中的一种重要的渲染技术,它能够帮助实现更精确的逼真的光照效果。本文将介绍OpenGL深度测试相关的一些基础知识、概念和算法。 1.1 OpenGL深度测试

AI天才研究院 1266

多边形的正反面,剔除

OPENGL中采用的是简单的凸多边形,要求多边形的各边不能相交。   OPENGL中规定:如果多边形的顶点以逆时针顺序出现在屏幕上,则为“正面”。 我们通过使用void glFrontFace(GLenum mode) 函数可以交换图形的正反面。 默认情况下,mode是GL_CCW,即逆时针为正面;GL_CW顺时针为正面。   为了丢弃一些被OPENGL认为是背面的多边形,应采用剔除。

Wadejr的专栏 1307

计算机图形学基础与实践:原理、方法及应用

本文还有配套的精品资源,点击获取 简介:计算机图形学作为信息技术的重要分支,涉及图形的表示、处理和显示,在多个领域有广泛应用。本教材由潘云鹤、董金祥、陈德人编著,系统地介绍了计算机图形学的核心概念与方法。内容包括图形学基础知识、基本图形的生成与计算、图形变换技术以及图形输入与交互技术。旨在帮助读者掌握图形数据的表示方法和图形技术,以及实现有效的用户交互。 1. 计...

weixin_42594419的博客 2667

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

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

1774

脑影像分析工具JuSpace:跨模态关联的神经递质系统研究利器

JuSpace是一款专业的脑影像分析软件,专为跨模态关联研究设计。它能够将功能或结构磁共振影像与神经递质PET/SPECT图谱进行空间关联分析,帮助研究者探索宏观脑影像异常与微观神经化学系统(如多巴胺、血清素)之间的潜在联系,是神经精神疾病机制研究的强大工具。

c2d3e4f的博客 544

基于N32G003的PMBus从机协议栈设计与STM32F103模拟I2C主机通信实战

本文详细介绍了基于N32G003微控制器设计PMBus从机协议栈,并与STM32F103模拟I2C主机进行通信的实战方案。重点阐述了中断驱动架构、命令解析、CRC8优化及超时恢复机制,实现了在70kHz速率下稳定可靠的工业电源管理通信,适用于服务器电源、通信基站等成本敏感应用场景。

numpy6sculptor的博客 920

Accumulation Buffer(累积缓存)

<br />累积缓存是为合成多幅图像而设计的,它不是简单的用引入象素片元来代替象素值,而是将片元进行缩放,然后加到已有的象素值上。为了经过一系列的混合操作后能够保持精度,累积缓存每个颜色分量的位数要比一般的可视化系统要多。<br /> <br />我们可以象其他缓存一样清空累积缓存,可以用glClearAccum()来设置红、绿和蓝色分量的清空值,按位顺序清空累积缓存或以GL_ACCUM_BUFFER_BIT调用glClear()命令。<br /> <br />你不能直接渲染进累积缓存,而是应该渲染到一个选

Augusdi的专栏 1710

架构决策之消息中间件MQ系列六-Pulsar

一、架构

恰恰虎的博客 7255

unity里面判断两个image是否重叠

由于UGUI里面的对象做触发检测很麻烦而且不方便,偶尔还会不准确,因此可以使用更精准有效的方式,通过检测两个Image是否发生重叠。 矩形相交的判断,代码如下: using UnityEngine; public class ImageOverlap : MonoBehaviour { private RectTransform rt; public RectTransform TargetRt; void Start() { rt = GetCo

小小魔头的BLOG 6491

Chroma向量数据库实战:用Python快速搭建本地知识库(附中文诗词检索案例)

本文详细介绍了如何使用Chroma向量数据库和Python快速搭建本地知识库,并附有中文诗词检索的实战案例。通过解析核心概念、数据准备、向量化及智能检索实现,展示了Chroma在处理中文语义搜索时的轻量级与易用性,为开发者构建AI应用原型提供了实用指南。

weixin_29221753的博客 480

统一大型语言模型和知识图谱:路线图

大型语言模型(LLM),如ChatGPT和GPT4,由于其涌现能力和泛化性,正在自然语言处理和人工智能领域掀起新的浪潮。然而,LLM是黑箱模型,通常无法捕捉和获取事实知识。相反,知识图谱(KGs),例如维基百科和华普,是显式存储丰富事实知识的结构化知识模型。KGs可以通过为推理和可解释性提供外部知识来增强LLM。同时,KGs很难从本质上构建和演化,这对KGs中现有的生成新事实和表示未知知识的方法提出了挑战。因此,将LLM和KGs统一在一起并同时利用它们的优势是相辅相成的。

qq_32907491的博客 2843

华科_图形学笔记_10_有趣的测试和合并_片元操作

计算机图形学_华中科技大学_中国大学MOOC(慕课) 10.1_再看片元操作 在之前的课程中,我们讨论了片元着色的相关计算,包括光照、纹理、阴影等。今天,我们进入到管线的最后一步_片元操作。 我们首先回顾一下整个可编程管线在几何阶段的最后一步是屏幕映射。屏幕映射后,每个顶点除了在屏幕坐标系中的XY坐标的值并没有丢,而是一起传给了光栅化阶段,也就是说它还是一个立体的,不是一个平面。 还要特别强调一个问题,那就是屏幕坐标系的问题,之前的建模坐标系,观察坐标系一直都是右手系。而在屏幕坐标系,就

精密时空设计局 342

Debezium系列之:深入理解 Debezium Topic的设置要求

Debezium系列之:配置 Debezium Topic

zhengzaifeidelushang的博客 1009

图形学基础概念笔记(一)

图形学笔记 常见专有名词 显卡和GPU GPU和CPU的区别? 主流CPU(Central Processing Unit,中央处理器)芯片上有四级缓存,消耗了大量晶体管,在运行时需要大量电力;主流GPU(Graphics Processing Unit,图形处理器)芯片最多有两层缓存,且GPU可以利用晶体管上的空间和能耗做成ALU单元,因此GPU比CPU效率高。 CPU重在实时响应,对单任务速度要求高,需要针对延迟优化,所以晶体管数量和能耗都需要用在分支预测、乱序执行、低延迟缓存等控制部分;GPU主要使用

by UPiracy 3724

​​​​手把手教你玩转RT-Thread操作系统专栏--​​​​第5章 设备驱动开发:RT-Thread的设备框架​​​​5.4 I2C/SPI驱动:如何驱动外部传感器(以MPU6050为例)​

通过本节学习,掌握了基于RT-Thread设备模型的I2C/SPI驱动开发流程,包括硬件初始化、寄存器读写、设备注册及应用程序调用。I2C(Inter-Integrated Circuit)和SPI(Serial Peripheral Interface)是嵌入式系统中最常用的两种串行总线协议,广泛用于连接传感器、存储器等外设。函数通过I2C协议读取外设寄存器的数据(如MPU6050的加速度寄存器)。SPI读取需先拉低片选(CS),发送寄存器地址,再读取数据,最后拉高CS。查找I2C设备,并调用。

xiaoheshang_123的博客 127

fanuc机器人KAREL中 函数的应用

本次课程讲解编程的思路。很多的同学都玩过积木,一个一个的模块逐渐累积起来,通过彼此之间的相互联系,最终形成一个完整的整体。其实编程也是这样。 将一个对象根据其特点进行模块化拆分,尤其是一些特点非常相似的内容,将其变成一个模块。然后通过传递参数,实现不同的功能,这就是模块化编程。

haier123888的博客 2744

华科_图形学笔记_09_奇妙的真实感_片元着色01_01

计算机图形学_华中科技大学_中国大学MOOC(慕课) 9.1_图形渲染与视觉外观 提纲 图形渲染的光栅化阶段 一个在精准的线框模型也不可能有真实感。 这里每个三角形的面片叫做一个片元fragment 我们,需要对这个三角形进行片元着色,也就是计算出三角形内部所有像素的颜色值, 只有这样,这个模型才可能最终获得真实感。 其实片元着色是光栅化阶段的第三步 之前的三角形设定和遍历是由gpu根据屏幕映射的结果自动完成的。 显然,接下来的片元着色的工作就十分

精密时空设计局 810

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【计算机图形学】计算机图形学笔记

在计算机图形学中,渲染流水线的各个阶段都有其特定的任务和计算设备。应用阶段是否将数据从内存准备到显存中?是的,在应用阶段,数据确实会从内存(如系统内存RAM)准备到显存(如VRAM)中。这是因为显卡对显存的访问速度远快于对系统内存的访问,且显卡通常没有直接访问系统内存的能力(或访问速度极慢)。因此,在渲染开始前,CPU会将所有必要的渲染数据(如网格、纹理、顶点信息等)从硬盘加载到系统内存中,然后再将这些数据复制到显存中,以便GPU在渲染过程中能够高效地访问这些数据。

Leoh的博客 1064

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

计算机图形学 —— 渲染管线概述(自用)

渲染管线(RenderingPipeline),也称为渲染流水线,是计算机图形学中用于生成二维图像以表现三维场景的处理流程。它描述了一系列连续的步骤,这些步骤从原始的三维模型数据出发,经过一系列计算和处理,最终转化成能在屏幕上看到的像素。《Real-TimeRendering,FourthEdition》一书中,定义渲染管线的基本结构包含一下四个阶段:应用阶段几何处理阶段光栅化阶段和像素处理阶段。其中,应用处理阶段主要在CPU上运行,另外三个阶段在GPU上运行。

2401_86977737的博客 1482

假人有限元模型

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

基于3d计算机图形学理论(五)

第四章 片元处理和输出合并操作 1.由光栅器生成的片元属性通常包含深度值,法线向量,RGB颜色值以及一组纹理坐标。 2.纹素:独立的纹理实体。 纹理通常可以描述为一个2d纹素阵列。 3.纹理地址(u,v)采用标准化的坐标数据。 4.纹理地址VS实际地址 4.1.2 表面参数化操作 1.纹理坐标与多边形网格之间的赋值过程为表面参数化操作。 需将3D表面延展为2D平面域。 2.Direct ...

QQ2812F2812的博客 293

计算机图形学:基于3D图形开发技术——第三章 光栅化操作

光栅化操作阶段,由顶点程序处理的顶点将进入硬件处理阶段。首先顶点组装为图元,如三角形。同时,各个图元还将被进一步处理,进而确定屏幕上的2D形式,并光栅化为片元集合。 光栅化过程包括如下子操作:剪裁操作、透视除法、背面剔除操作、视口转换以及扫描转换。光栅化操作不可编程。   3.1剪裁操作 剪裁算法通常在硬件中实现,用户无权干涉。分为3种: 三角形位于视锥体外部并被丢弃; 三角形位于视锥

ivebeenready的专栏 2723

计算机图形学

计算机图形学

ProgramNovice的博客 662

深入解析GPU渲染流水线:从顶点处理到片元着色

渲染流水线是计算机图形学的核心概念,指从3D场景数据到最终2D图像生成的完整处理流程。其核心技术原理是通过CPU与GPU的协同工作,CPU负责准备渲染数据和状态配置,GPU则通过高度并行化的图形处理流水线执行实际渲染。在游戏开发和图形应用中,优化渲染流水线能显著提升性能,常见技术包括批处理减少DrawCall、Early-Z优化和Shader变体管理。现代GPU渲染涉及顶点着色器坐标转换、光栅化、片元着色等关键阶段,支持可编程着色器实现复杂视觉效果。理解渲染流水线对开发高性能Shader和优化图形应用至关重

weixin_28850145的博客 296

计算机图形学 c#面试

渲染 管线 https://blog.youkuaiyun.com/jxw167/article/details/54695181 渲染管线主要分为四个步骤:顶点变换,图元装配,光栅化,像素处理。 顶点处理: 顶点渲染的作用是对三维图元的顶点进行坐标变换和光照计算,生成可用于渲染到投影空间的顶点坐标、颜色和纹理坐标。顶点渲染就是定义了一系列针对顶点的渲染指令或渲染语句,当Direct3D处理图元顶点时,自动...

ferb的语音识别学习小站 1130

深入理解渲染管线与 Shader 的关系

渲染管线可以看作是计算机图形处理的一系列流程,就像一条工业生产线,将三维模型、纹理、光照等信息逐步转化为最终呈现在屏幕上的二维图像。应用阶段:这是渲染管线的起点,由应用程序(如游戏引擎)负责。在这个阶段,应用程序会进行场景管理、物体的选择与排序等操作,并将需要渲染的物体信息(如顶点数据、材质信息等)传递给渲染管线。几何阶段:主要处理物体的几何信息,包括顶点变换、投影、裁剪等操作。顶点变换将物体的顶点从模型空间转换到世界空间、观察空间和裁剪空间;投影将三维空间中的物体投影到二维平面上;

m0_57836225的博客 883
上一篇: Leetcode665. 非递减数列
下一篇: 计算机图形学 | 实验十二:混合(透明物体处理)
UestcXiye
博客等级 码龄8年 9032粉丝 1306原创
评论
成就一亿技术人!
拼手气红包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、付费专栏及课程。

余额充值