【mapboxgl源码解析】深度测试问题

news/2024/12/22 16:18:09/

mapbox所有图层深度测试

globeAtmosphere(不写深度) new DepthMode(gl.LEQUAL, DepthMode.ReadOnly, [0, 1]);
circle(不写深度) painter.depthModeForSublayer(0, DepthMode.ReadOnly);
line(不写深度) painter.depthModeForSublayer(0, DepthMode.ReadOnly);
symbol(不写深度) painter.depthModeForSublayer(0, DepthMode.ReadOnly);
background (默认也是写深度的) painter.depthModeForSublayer(0, pass === ‘opaque’ ? DepthMode.ReadWrite : DepthMode.ReadOnly);
fill painter.depthModeForSublayer(1, painter.renderPass === ‘opaque’ ? DepthMode.ReadWrite : DepthMode.ReadOnly);、
raster(默认也是写深度的) painter.depthModeForSublayer(coord.overscaledZ - minTileZ,layer.paint.get(‘raster-opacity’) === 1 ? DepthMode.ReadWrite : DepthMode.ReadOnly, gl.LESS);
fillExtrusion new DepthMode(gl.LEQUAL, DepthMode.ReadWrite, painter.depthRangeFor3D);
globeRaster new DepthMode(gl.LEQUAL, DepthMode.ReadWrite, painter.depthRangeFor3D);

painter.depthModeForSublayer方法解析

    depthModeForSublayer(n: number, mask: DepthMaskType, func: ?DepthFuncType): $ReadOnly<DepthMode> {if (!this.opaquePassEnabledForLayer()) return DepthMode.disabled;const depth = 1 - ((1 + this.currentLayer) * this.numSublayers + n) * this.depthEpsilon;return new DepthMode(func || this.context.gl.LEQUAL, mask, [depth, depth]);}

先了解下gl.depthRange,该函数接受两个参数,分别表示深度值的最小和最大范围。通常情况下,这些值默认为0.0和1.0,就是会将计算后的深度值映射到0-1
这里可以看到gl.depthRange(depth, depth),far和near相同,注意:[这将导致深度缓冲区的所有深度值都将被截断到depth,这可能会导致渲染效果的一些问题,因为深度测试和深度缓冲区的比较将不再有效]
但是这里为什么要这么做呢?主要是为了手动写入该图层的深度值,值大小=depth,后续图层遮挡关系就由depth来决定啦

还有注意下这里的n是干啥的没看懂

painter.depthRangeFor3D解析

[0, 1 - ((style.order.length + 2) * this.numSublayers * this.depthEpsilon)]; // 算出来如0.99957275390625

这个是3D图层如fillExtrusion和globeRaster来用的,目前看3D图层的depth算法算出的肯定会小于其他图层的


http://www.ppmy.cn/news/1204818.html

相关文章

程序员可以做哪些副业?我整理的千字副业指南。

都说不想做副业的程序员不是好程序员&#xff0c;尤其是在经济形势不好的现在&#xff0c;有一份靠谱和稳定的副业更是成为了程序员的不二之选。程序员的副业是细水长流型的&#xff0c;虽然收入未必能超过主业&#xff0c;但胜在每月稳定入账&#xff0c;可以作为小金库和备用…

Python教程之Python中文件路径

文章目录 前言一、Python中文件路径1.绝对路径和相对路径2.目录中的斜杠们3.正则表达式中的斜杠们 二、什么是文件路径&#xff0c;Python中如何书写文件路径&#xff1f;1.Windows上的反斜杠以及OS X和Linux上的正斜杠关于Python技术储备一、Python所有方向的学习路线二、Pyth…

昇腾CANN 7.0 黑科技:大模型推理部署技术解密

CANN作为最接近昇腾AI系列硬件产品的一层&#xff0c;通过软硬件联合设计&#xff0c;打造出适合昇腾AI处理器的软件架构&#xff0c;充分使能和释放昇腾硬件的澎湃算力。针对大模型推理场景&#xff0c;CANN最新发布的CANN 7.0版本有机整合各内部组件&#xff0c;支持大模型的…

AD教程 (十)Value值的核对

AD教程 &#xff08;十&#xff09;Value值的核对 填写器件位号 直接根据原理图的原始编号进行更改 通过位号编辑器快速更改 点击工具&#xff0c;选择标注&#xff0c;选择原理图标注&#xff0c;进入位号编辑器 可以在位号编辑器中 设置处理顺序&#xff0c;从上往下还是从…

[ACTF2020 新生赛]BackupFile 1

题目环境&#xff1a; 好好好&#xff0c;让找源文件是吧&#xff1f;咱们二话不说直接扫它后台 使用dirsearch工具扫描网站后台&#xff08;博主有这个工具的压缩包&#xff0c;可以私聊我领取&#xff09;python dirsearch.py -u http://0d418151-ebaf-4f26-86b2-5363ed16530…

52基于MATLAB的希尔伯特Hilbert变换求包络谱

基于MATLAB的希尔伯特Hilbert变换求包络谱&#xff0c;对原始信号进行初步滤波&#xff0c;之后进行包络谱分析。可替换自己的数据进行优化。程序已调通&#xff0c;可直接运行。 52的尔伯特Hilbert变换包络谱 (xiaohongshu.com)

第23章(上)_索引原理之索引与约束

文章目录 索引索引分类主键选择索引的代价 约束外键约束约束与索引的区别 索引使用场景不要使用索引的场景总结 索引 索引的概念&#xff1a;索引是一种有序的存储结构。索引按照单个或多个列的值进行排序。 索引的目的&#xff1a;提升搜索效率。 索引分类 按照数据结构分为…

阿里云双11优惠活动:2核2G3M云服务器1年99元,新老用户均可购买!

阿里云双11优惠活动正在火热进行中&#xff0c;阿里云推出了一款特价云服务器ECS&#xff0c;2核2G3M的配置1年仅需99元&#xff0c;新老用户均可购买&#xff0c;新购、续费同价&#xff01; 活动入口&#xff1a;传送门>>> 活动详情&#xff1a; 云服务器ECS&#…