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

news2024/12/26 20:50:15

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

  • 计算机图形学 | 有趣的测试和合并——片元操作
    • 10.1 再看片元操作
      • 片元操作
      • 几个重要的缓冲区
    • 10.2 谁遮住了我?
      • 消隐的概念
      • 面剔除
      • 深度测试
        • 深度缓冲器算法(Z-buffer算法)
        • 深度排序算法(depth sorting method)
      • OpenGL中的消隐
        • 面剔除
        • 深度测试

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

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);

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

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

相关文章

新华三发布绿洲平台3.0,五大能力升级,构筑坚实用数底座

当前我国数字经济飞速发展&#xff0c;据中国信息通信研究院发布的《中国数字经济发展研究报告&#xff08;2023年&#xff09;》显示&#xff0c;2022年&#xff0c;我国数字经济规模达到50.2万亿元&#xff0c;同比名义增长10.3%&#xff0c;已连续11年显著高于同期GDP名义增…

HTTP协议概述(见过花开就好了,何必在意花落谁家呢)

文章目录 一、简介二、HTTP版本三、HTTP 方法四、HTTP状态码五、HTTP 请求流程分析1.请求报文2.响应报文 一、简介 客户端输入域名&#xff0c;经域名解析成IP地址&#xff0c;在与服务端建立数据传输之前&#xff0c;要先建立TCP连接&#xff08;三次握手&#xff09;&#x…

Day03 02-MySQL多表查询详解

文章目录 第八章 多表查询8.1 多表查询介绍8.1.1 什么是多表查询8.1.2 多表查询基本写法8.1.3 笛卡尔积8.1.4 连接查询条件限制 8.2 连接查询分类8.2.1 内连接8.2.2 外连接8.2.3 全连接8.2.4 自然连接 8.3 子查询8.3.1 子查询简介8.3.2 在where子句中8.3.3 在from子句中8.3.4 在…

是德科技keysight E8257D信号发生器

产品概览 Keysight E8257D (Agilent) PSG 模拟信号发生器提供业界领先的输出功率、电平精度和高达 67 GHz 的相位噪声性能&#xff08;工作频率可达 70 GHz&#xff09;。Agilent PSG 模拟信号发生器的高输出功率和卓越的电平精度通常无需使用外部放大器来测试高功率设备&…

国内热门AI智能音箱品牌都采用了哪些功放芯片

音频功放IC是各类音响、耳机等器材不可或缺的一部分&#xff1b;音频功率放大器芯片俗称“扩音器”&#xff0c;是音响系统中最基本的设备&#xff0c;负责将来自信号源的微弱电信号进行放大&#xff0c;以驱动扬声器发声&#xff0c;从而将声音传至我们的听觉系统。 现如今&a…

浅谈电解电容在电路设计中的作用

谈起电解电容我们不得下多了解一下它的作用 1、滤波作用 在电源电路中&#xff0c;整流电路将交流变成脉动的直流&#xff0c;而在整流电路之后接入一个较大容量的电解电容&#xff0c;利用其充放电特性(储能作用)&#xff0c;使整流后的脉动直流电压变成相对比较稳定的直流电…

启动页/闪屏/引导页-你还傻傻分不清?

启动页/闪屏/引导页-你还傻傻分不清&#xff1f;&#xff08;转载&#xff09; - 知乎 今天就跟大家一起来认识一下开屏三姐妹&#xff1a;启动页/闪屏/引导页。 通常三姐妹出场顺序如下&#xff1a; 下面我们来深入认识一下这三姐妹&#xff1a; 1、启动页 定义&#xff1…

ChatGPT:你真的了解网络安全吗?浅谈网络安全攻击防御进行时之传统的网络安全

ChatGPT&#xff1a;你真的了解网络安全吗&#xff1f;浅谈网络安全攻击防御进行时 传统的网络安全 ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;美国OpenAI 研发的聊天机器人程序&#xff0c;是人工智能技术驱动的自…

搭建hadoop集群

搭建Hadoop集群 1&#xff0c;准备环节 Hadoop完全分布式集群式&#xff08;master/slave&#xff09;主从架构。 因为Hadoop是由java编写的&#xff0c;所以需要Java的环境支持&#xff0c;作为开发者我们需要安装jdk。 安装jdk的教程http://t.csdn.cn/6qJKg 下载Hadoop的…

spring(不是springboot)集成apllo方案

现在到处都是基于 springboot 的微服务项目。 不巧手头碰到了一个 spring 的项目&#xff0c;打war包直接放到tomcat中启动的。 现在要将apollo集成进来&#xff0c;要求 Access Key 不可以放在properties 配置文件中&#xff0c;要统一使用apollo来管理。 步骤如下&#xff1a…

《计算机网络——自顶向下方法》精炼——3.5.5-3.6.1

学习是劳动&#xff0c;是充满思想的劳动。——乌申斯基 文章目录 TCP流量控制TCP连接管理建立TCP连接拆除TCP连接TCP状态的转换 TCP拥塞控制情况1&#xff1a;两个发送方&#xff0c;一个无限缓存的路由器情况2&#xff1a;两台主机&#xff0c;一台具有有限缓存的路由器情况3…

【源码解析】EasyExcel导入导出源码解析

EasyExcel介绍 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存&#xff0c;poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题&#xff0c;但POI还是有一些缺陷&#xff0c;比如07版Excel解压缩以及解压后存储都…

XPCIE1032 — 高速高精,超快交互速率的PCIe EtherCAT实时运动控制卡

产品导读 XPCIE1032是一款基于PCI Express的EtherCAT总线运动控制卡&#xff0c;可选4-16轴运动控制&#xff0c;支持多路高速数字输入输出&#xff0c;可轻松实现多轴同步控制和高速数据传输。 XPCIE1032集成了强大的运动控制功能&#xff0c;结合MotionRT7运动控制实时软核…

PyQt5桌面应用开发(17):中文书评+类结构+QWebEngineView

本文目录 PyQt5桌面应用系列PyQt5学习PyQt5类结构和帮助速查实现与解释最终界面和完整源代码界面完整的代码 总结 PyQt5桌面应用系列 PyQt5桌面应用开发&#xff08;1&#xff09;&#xff1a;需求分析 PyQt5桌面应用开发&#xff08;2&#xff09;&#xff1a;事件循环 PyQt5桌…

【中危】Apache Ranger 2.3.0 存在远程代码执行漏洞

漏洞描述 Apache Ranger 是一款用于在 Hadoop 平台及其他平台启用、监控和管理全面的数据安全性的开源框架。Apache Ranger 表达式策略是一种动态访问控制策略&#xff0c;通过自定义表达式来指定更细粒度的访问控制条件。 Apache Ranger 受影响版本中具有管理员权限或策略管…

【微博-自定义Cell-创建子控件 Objective-C语言】

一、自定义Cell 1.既然我们要自定义Cell,这个自定义Cell,属于MVC哪个部分, 这个Cell类,属于MVC哪个部分, Model、Controller、还是View, View吧, 所以说,应该在这里去新建一个类, 在这里去新建一个类,右键,New File,

SpringBoot中使用枚举类、switch、常量类(声明并初始化map)实现类策略者模式,接口返回常量数据

场景 SpringBoot中策略模式工厂模式业务实例(接口传参-枚举类查询策略映射关系-执行不同策略)规避大量if-else&#xff1a; SpringBoot中策略模式工厂模式业务实例(接口传参-枚举类查询策略映射关系-执行不同策略)规避大量if-else_霸道流氓气质的博客-CSDN博客 SpringBootVa…

Python对Excel文件多表对多表之间的匹配(两种不同表头)——之json版

首先Excel文件多表对多表之间的匹配(VLOOKUP),有多种办法&#xff0c; 1&#xff1a;将Excel文件导入Mysql或其他数据库,然后将两种表合并成一张表&#xff0c;接着用数据库匹配 2&#xff1a;将两种表内容&#xff0c;复制粘贴到一起&#xff0c;各自分别保存成一张表&#xf…

伦茨科技带你了解蓝牙App开发的流程

随着移动互联网的快速发展&#xff0c;给我们的生活带来了越来越多的便利&#xff0c;蓝牙App的开发也越来越普及。那么&#xff0c;简单来说&#xff0c;蓝牙App软件的开发就是在手机上为蓝牙物理设备提供具有相关功能的App软件终端&#xff0c;让蓝牙设备更方便的为用户提供服…

appsync unified怎么安装

一、什么是AppSync Unified&#xff1f; AppSync Unified是一款iOS设备上的越狱插件&#xff0c;它可以帮助用户安装和运行未经苹果审核的应用程序和插件。AppSync Unified可以支持iOS 11-14系统&#xff0c;并可以在iPhone和iPad上使用。它的功能主要是允许用户安装和运行不经…