ClassificationPrimitive 内部原理

ClassificationPrimitive 内部原理

发明 ClassificationPrimitive的真是个天才。其原理是利用 webgl 的模板缓冲区实现。

渲染两次, 首先是绘制模板, 然后绘制真正的内容。

示意图:
请添加图片描述

请添加图片描述

function createClass() {const { program, uniforms } = WebGLProgram.buildPrograms(gl, shaders).plane;const geometry = new Geometry(getCubeGeometry(gl))geometry.scale.set(2, 2, 4)geometry.position.y = -0.5;geometry.rotation.x = -Math.PI / 2;// 首先是绘制模板classCommandStencilDepth = new DrawCommand({gl,camera,geometry: geometry,program: program,uniforms: uniforms,uniformsData: {uColor: {type: 'vec4f',value: [0.0, 0.2, 0.8, 0.5]}},renderState: new RenderState({colorMask: {red: false,green: false,blue: false,alpha: false,},stencilTest: {enabled: true,frontFunction: StencilFunction.ALWAYS,frontOperation: {fail: StencilOperation.KEEP,zFail: StencilOperation.DECREMENT_WRAP,zPass: StencilOperation.KEEP,},backFunction: StencilFunction.ALWAYS,backOperation: {fail: StencilOperation.KEEP,zFail: StencilOperation.INCREMENT_WRAP,zPass: StencilOperation.KEEP,},reference: StencilConstants.CESIUM_3D_TILE_MASK,mask: StencilConstants.CESIUM_3D_TILE_MASK,},stencilMask: StencilConstants.CLASSIFICATION_MASK,depthTest: {enabled: true,func: DepthFunction.LESS_OR_EQUAL,},depthMask: false,})})// 最终颜色classCommandColor = new DrawCommand({gl,camera,geometry: geometry,program: program,uniforms: uniforms,renderState: new RenderState({stencilTest: {enabled: true,frontFunction: StencilFunction.NOT_EQUAL,frontOperation: {fail: StencilOperation.ZERO,zFail: StencilOperation.ZERO,zPass: StencilOperation.ZERO,},backFunction: StencilFunction.NOT_EQUAL,backOperation: {fail: StencilOperation.ZERO,zFail: StencilOperation.ZERO,zPass: StencilOperation.ZERO,},reference: 0,mask: StencilConstants.CLASSIFICATION_MASK,},stencilMask: StencilConstants.CLASSIFICATION_MASK,depthTest: {enabled: false,},depthMask: false,blending: BlendingState.PRE_MULTIPLIED_ALPHA_BLEND,})})
}

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

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

相关文章

代码随想录算法训练营第36期DAY22

DAY22 654最大二叉树 自己做的时候忽略了:nums.length>1的题给条件。所以每次递归都要判断是否size()>1,不要空的。 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *rig…

牛客网刷题 | BC84 牛牛学数列2

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 这次牛牛又换了个数…

sql中的exists和in的区别

在SQL中,EXISTS 和 IN 都用于子查询,但它们的用法和目的有所不同。 ### EXISTS EXISTS 是一个逻辑运算符,用于检查子查询是否返回任何行。如果子查询返回至少一行,那么 EXISTS 子句的结果为 TRUE;否则,结果…

一个用Kotlin编写简易的串行任务调度器

引言 由于项目中有处理大量后台任务并且串行执行的需求,特意写了一个简易的任务调度器,方便监控每个任务执行和异常情况,任务之间互不影响。正如上所述,Kotlin中的TaskScheduler类提供了一个强大的解决方案,用于使用S…

「AIGC」Python实现tokens算法

本文主要介绍通过python实现tokens统计,避免重复调用openai等官方api,开源节流。 一、设计思路 初始化tokenizer使用tokenizer将文本转换为tokens计算token的数量二、业务场景 2.1 首次加载依赖 2.2 执行业务逻辑 三、核心代码 from transformers import AutoTokenizer imp…

React: memo

React.memo 允许你的组件在 props 没有改变的情况下跳过重新渲染。 const MemoizedComponent memo(SomeComponent, arePropsEqual?)React 通常在其父组件重新渲染时重新渲染一个组件。你可以使用 memo 创建一个组件,当它的父组件重新渲染时,只要它的新…

centos7服务器采用局域网内笔记本代理上网

一、背景 某台服务器操作系统是centos 7,不能上网。我想在上面装个ftp软件:vsftpd。 二、思路 要安装这个软件,有2种方案 1)设置该台centos7可以上网 2)离线安装vsftpd 鉴于各种依赖,万一因为依赖不全或…

《海峡科技与产业》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问:《海峡科技与产业》期刊是什么级别? 答:国家级 主管单位:中华人民共和国科学技术部 主办单位:科技部海峡两岸科学技术交流中心 问:《海峡科技与产业》影响因子? 答:…

相位;傅里叶变换和傅里叶级数是什么;欧拉公式是什么,和傅里叶关系;

目录 相位 傅里叶变换公式使用举例 实际案例 傅里叶变换和傅里叶级数是什么

随笔:棋友们

我是在小学二年级学会中国象棋的,准确说,是学会象棋的下棋规则的,师傅是二舅。我最早的对手就是同学波仔。波仔比我略早学会象棋,总用连珠炮欺负我,开局几步棋就把我将死。我不知道怎么破解。轮到我先走时,…

扭亏为盈的赛力斯,真正进入稳态了吗?

“72小时内大定破1万台”。5月15日,问界新M5开启全国大规模交付,从当前取得的成绩来看,赛力斯的“富贵”似乎还将延续。 其实,此前基于问界新M7等车型的爆火,赛力斯已经找到了创收轨道。财报显示,2024年一…

alist网盘自动同步

alist网盘自动同步 alist可以设置目录定时转存到各个网盘,做到夸网盘,多备份的效果可以将自己挂载的alist 下的各个目录相互间进行同步,原理是采用alist原始api调用执行同步原理1.匹配文件名称是否相同,2.文件大小是否相同,相同会…

一文详细解析Google编码规范工具cpplint的下载安装与使用

目录 一、什么是cpplint 二、cpplint能实现的功能 三、cpplint的下载与使用 1、配置python环境 2、安装cpplint 四、cpplint常用命令讲解 1、常用命令查看 2、常用命令详解 3、命令使用方式 五、 cpplint的实用技巧 1、集成cpplint 1.1、修改调用接口. 1.2、直接把…

数据结构(C):树的概念和二叉树初见

目录 🍺0.前言 1.树概念及结构 2.认识一棵树 3.树的表示 3.1树在实际中的运用(表示文件系统的目录树结构) 4.二叉树 4.1特殊的二叉树 4.2二叉树的性质 💎5.结束语 🍺0.前言 言C之言,聊C之识&…

卷积模型的剪枝、蒸馏---蒸馏篇--NST特征蒸馏(以deeplabv3+为例)

本文使用NST特征蒸馏实现deeplabv3+模型对剪枝后模型的蒸馏过程; 一、NST特征蒸馏简介 下面是两张叠加了热力图(heat map)的图片,从图中很容易看出这两个神经元具有很强的选择性:左图的神经元对猴子的脸部非常敏感,右侧的神经元对字符非常敏感。这种激活实际上意味着神经…

程序员绩效管理-序言

开辟一个新专栏专门讨论程序员绩效管理。作为软件开发企业,公司的命脉掌握在程序员手中。程序员的绩效管理是个超级难题。小张和老王专栏介绍了两个典型的人员。但是这是两个虚拟的极端人员,大部分开发人员没有那么容易分辨。1个任务,应该1天…

LabVIEW软件开发工程师需要具备哪些能力与素质?

成为一名优秀的LabVIEW软件开发工程师,需要具备以下能力与素质: 技术能力 LabVIEW编程技能: 精通LabVIEW编程,能够熟练使用其图形化编程界面。熟悉LabVIEW中的各种功能模块和工具包,如数据采集(DAQ&#x…

如何配置Nacos的健康检查参数?

在微服务架构中,服务注册与发现以及健康检查是至关重要的组件。Nacos,作为阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置和服务管理平台,广泛应用于微服务架构中。在Nacos中,服务的健康检查是一个核心功能&#xf…

【Python】使用MySQL综合案例

数据说明: 一月份各省销售数据:csv格式 二月份各省销售数据:json格式 实现要求:将两个文件中的数据存储到数据库中,并反向从数据库中读取数据存储为json格式文件 本文提供数据 完成案例所需基础 【Python】基础知识(函数与数…

C++ 日志库 log4cpp 编译、压测及其范例代码 [全流程手工实践]

文章目录 一、 log4cpp官网二、下载三、编译1.目录结构如下2.configure 编译3.cmake 编译 四、测试五、压测源码及结果1.运行环境信息2.压测源码3.压测结果 文章内容:包含了对其linux上的完整使用流程,下载、编译、安装、测试用例尝试、以及一份自己写好…