首页 > 其他分享 >图形学初识--深度测试

图形学初识--深度测试

时间:2024-06-03 21:30:13浏览次数:23  
标签:-- 遮挡 图形学 像素 buffer 算法 初识 测试 深度

文章目录

前言

本章节补充一下深度测试的内容,主要包含:为什么要有深度测试?深度测试现代实现方式?

正文

为什么要有深度测试?

画家算法

当我们渲染两个三角形的时候,如何体现出遮挡关系的呢?实际上一开始,就是谁先渲染谁就可能被覆盖,这种算法就是画家算法。

就如起名,就像画家画画一样,先画的再后面,同样的区域后画的覆盖之!如下图所示:

在这里插入图片描述

循环遮挡

这个山、草地、大树就体现出了这种层次关系,但是当我们需要处理特别复杂的遮挡关系的时候,这种算法就无能为力了,如下所示:

在这里插入图片描述

这种情况就是循环遮挡的关系,无法单纯的实现完成!所以需要引入Z-buer的机制来进行解决这种遮挡问题。

总结一下: 深度测试的本质是为了体现先后的遮挡关系。简单的情形,如画家算法就可以满足,复杂的情形,就需要利用z-buffer机制处理!

深度测试当代最常见实现方式?

总述

通过引入z-buffer机制,通过空间换时间的方法,从而处理像素级别的遮挡问题!

什么是z-buffer呢?

其实本质上就是一块和屏幕空间分辨率同等大小的内存空间,每个元素是一个浮点数!

z-buffer从哪来呢?

大家都看过作者之前讲述屏幕空间变换的那一章节,经过屏幕变换后,得到了每个顶点的z坐标范围为 [ 0 , 1 ] [0,1] [0,1] ,这个z就是代表一种前后关系。

但是这只是顶点级别的前后关系,如何得到像素级别的z值呢?其实很容易联想到,就是三角形光栅化的时候,利用重心坐标插值算法进行插值呗!

如何利用z-buffer实现深度测试?

其实它的思想很混合有点相似,但是它没有中间的部分,它要么通过测试,显示该像素;要么未通过测试,不显示该像素。具体的描述如下:

当我们需要针对 ( x , y ) (x,y) (x,y) 做深度测试时,我们首先获取z-buffer中的对应深度值,假设为 l a s t z last_z lastz​ ,对于即将渲染的当前像素的深度值,假设为 c u r r e n t z current_z currentz​,通过比较两者大小,如果被挡住则丢弃;如果更靠前,则留下来。就是这么简单!

举个例子

假设z越靠近0越近,越靠近1越远,则如下图的初始z-buffer

在这里插入图片描述

当我们需要绘制几个z值为0.4的像素时,如下:

在这里插入图片描述

当又需要绘制一个新的像素区域时,如下:

在这里插入图片描述

是不是很简单呢!当然了,这个深度测试的通过判定,究竟是小的通过,还是大的通过,往往也是由需求而定,各个图形API也都是可以设置的!

结尾:喜欢的小伙伴点点关注+赞哦!

你们的点赞就是我创作的最大动力!希望对各位小伙伴能够有所帮助哦,永远在学习的道路上伴你而行, 我是航火火,火一般的男人!

标签:--,遮挡,图形学,像素,buffer,算法,初识,测试,深度
From: https://blog.csdn.net/u010092716/article/details/139424804

相关文章

  • VS Code自定义代码模板
    VSCode自定义代码模板VSCode作为一款轻量级的编辑器,使用体验极佳,具有很多有用的小功能,也有着非常丰富的插件,日常写代码的时候自动补全和各种模板能够有效的提高编码的效率,这里介绍两种我常使用的自定义代码块或者模板的设置方法。集成自定义代码段VSCode自带了用户定......
  • 使用neo4j时,无法load csv数据,或者出现Writing in read access mode not allowed, Att
    当在使用neo4j时需要导入csv数据批量创建节点时,显示无法导入CSV文件,看看是什么问题1.首先检查文件是否导入import文件打开import文件夹的方式如图,首先点击图数据库一栏右边三个点,移到Openfolder,点击import打开import文件夹后,检查是否存在要load的文件。2.当需要的CSV文......
  • 计算机毕业设计 | springboot养老院管理系统 老人社区管理(附源码)
    1,绪论1.1背景调研养老院是集医疗、护理、康复、膳食、社工等服务服务于一体的综合行养老院,经过我们前期的调查,院方大部分工作采用手工操作方式,会带来工作效率过低,运营成本过大的问题。院方可用合理的较少投入取得更好的服务效果,在满足社会需求、注重社会效益的同时,获得......
  • JAVA学习笔记6
    学习目标:精通JAVA学习内容:1.方法调用packagecn.itcast.day04.demo02;/*publicclassDemo01Method{publicstaticvoidmain(String[]args){for(intj=1;j<5;j++){for(inti=1;i<20;i++){System.out.print(“*”);}System.out.println();}}}......
  • 分享下最近基于Avalonia UI和MAUI写跨平台时间管理工具的体验
    起因几个月前,我在寻找一款时间管理软件,类似番茄时钟的工具,但是希望可以自定义时间。需要自定义的场景做雅思阅读,3篇文件需要严格控制时间分配,需要一个灵活的计时器定期提醒,每30分钟需要喝水或者上个厕所或者摸一下鱼...总结起来就是:专注一段时间,比如30分钟,然后休息10分钟,......
  • 【DRF-09】rest-framework之序列化(序列化)
    1.序列化用于对用户请求数据进行验证和数据进行序列化,本篇文章主要讲解序列化部分。1.1:序列化的意义:web有两种应用模式,一种是前后端不分离,一种是前后端分离,当前后端分离的时候,后端只需要向前端传输数据即可,不需要进行其他的操作,而restframework在前后端传输数据时,主要是jso......
  • system函数学习
    windows下system()函数详解windows操作系统下system()函数详解(主要是在C语言中的应用)函数名:system功能:发出一个DOS命令用法:intsystem(char*command);system函数已经被收录在标准c库中,可以直接调用程序例:include<stdlib.h>include<stdio.h>i......
  • 数据治理--数据盘点 盘点流程 表,字段调研 政府三清单 政府共享平台
      流程图viso自己画,业务系统调研-系统业务人员填写  业务系统调研模板 不需要录入系统的表 调研表的模板 调研字段模板     政府案例  政府三清单模板     政府部门共享交换平台 ......
  • 《无双大蛇魔王再临》远吕志章三方原详细熟练度及武器情报
    转载自游民星空,方便自己看,侵删原作者:windy0429首先开场往右下寨击破[不破光治]→接着移动到中央下方出现伏兵[佐佐成政(300经).柴田胜定.津田信春]→再往左中央移动出现伏兵[泷川一益(300经).明智秀满.伊势贞兴]→往上攻取兵粮库[明智光秀(武器盒).稻叶一铁.氏家卜全]&伏......
  • pycharm导入Python解释器错误解决
     1、新建环境出现问题的解决记录 ModuleNotFoundError:Nomodulenamed'distutils'Traceback(mostrecentcalllast):File"C:\Users\CXM\AppData\Local\Temp\tmppycharm-management/virtualenv.py",line22,in<module>importdistutils.......