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,
    })
  })
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CST电磁仿真软件什么是Schematic?三维模型和电路协同仿真【小白必学教程】

什么是Schematic? 使用CST Design Studio进行的各种分析! Schematic 进行三维仿真时,有时需要将3D模型和电路图放在一起进行仿真分析。比如需要天线和匹配电路协同仿真,两者构成完整的电路图可以系统地分析In/0ut特性。按下3D工作界面下方…

Spring Security实现用户认证一:简单示例

Spring Security实现用户认证一:简单示例 1 原理1.1 用户认证怎么进行和保存的?认证流程SecurityContext保存 2 创建简单的登录认证示例2.1 pom.xml依赖添加2.2 application.yaml配置2.3 创建WebSecurityConfig配置类2.4 测试 1 原理 Spring Security是…

React 第三十八章 React 中的位运算

位运算是一种计算机编程中常用的操作,它直接对二进制位进行操作。二进制,指的就是以二为底的一种计数方式,常见的还有八进制、十进制、十六进制。 十进制0123456789101112131415二进制0000000100100011010001010110011110001001101010111100…

【面试干货】 两个有序数组的合并排序

【面试干货】 两个有序数组的合并排序 1、实现思想2、代码实现 💖The Begin💖点点关注,收藏不迷路💖 1、实现思想 使用两个指针分别指向两个数组的起始位置,然后逐个比较两个指针所指向的元素,将较小的元素…

【全开源】场地预定小程序支持微信小程序+微信公众号+H5

XYvenue是基于FastAdminUniApp开发的多场馆场地预定小程序,提供运动场馆运营解决方案,适用于体育馆、羽毛球馆、兵乒球馆、篮球馆、网球馆等场馆。 功能特性 1、场馆管理 可添加多个预约场馆,小程序端切换场馆显示。 2、场地管理 可添加多…

C语言如何删除表中指定位置的结点?

一、问题 如何删除链表中指定位置的结点? 二、解答 删除链表中指定的结点,就像是排好队的⼩朋友⼿牵着⼿,将其中⼀个⼩朋友从队伍中分出来,只需将这个⼩朋友的双⼿从两边松开。 删除结点有两种情况: (1&am…

怎么删除pdf中的某一页?五种高效删除方法

怎么删除pdf中的某一页?PDF文件是我们在工作中经常需要处理的一类文件,它的格式很稳定,不易修改。但是,有时候我们可能需要对PDF文件进行编辑,比如删除其中的某一页。本文将为你介绍五种高效的方法,帮助你轻…

python 脚本压缩文件linux 正常,windows 文件夹/文件名称 被加上了上级文件夹名

场景: php 在调用python 脚本,进行文件压缩(因为php的压缩大文件总是超时),linux/mac 环境文件/文件夹名压缩前后一致,windows 压缩后 文件/文件夹名被改变为 上级 文件夹原名 原因: window…

短视频批量剪辑,智能素材文案生成,多账号授权私信回复与矩阵发布素材功能合集系统,短视频矩阵助手源码搭建部署源码开源部署方案。

目录 一、短视频矩阵助手系统是什么? 二、短视频矩阵助手系统可以为企业解决什么问题? 短视频矩阵助手可以解决哪些问题? 三、短视频矩阵助手系统功能有哪些? 四、总结 一、短视频矩阵助手系统是什么? 短视频矩阵…

提升LED显示屏散热效能的五大策略

在现代生活中,LED显示屏已成为不可或缺的信息展示工具,其广泛应用于商业广告、公共信息发布、舞台表演等多个领域。然而,随着LED显示屏的长时间运行,散热问题逐渐凸显,不仅影响设备的稳定性和寿命,还可能导…

Python实战开发及案例分析(25)—— 爬山算法

爬山算法(Hill Climbing)是一种启发式搜索算法,常用于解决优化问题。它的核心思想是从一个初始解开始,不断朝着增益最大的方向移动,直到达到局部最优解。 实现步骤 从初始解开始。在当前解的邻域中找到一个更好的解。…

Java入门基础学习笔记26——break,continue

跳转关键字: break: 跳出并结束当前所在循环的执行。 continue: 用于跳出当前循环中的当次执行,直接进入循环中的下一次执行。 package cn.ensource.loop;public class BreakContinueDemo8 {public static void main(String[] a…

AI大语言模型在公共服务中的应用实例

随着计算机技术的飞速发展,人工智能已经成为了当今科技领域的热门话题。从早期的图灵测试到现在的深度学习和神经网络,人工智能已经取得了令人瞩目的成就。特别是近年来,大数据、云计算、高性能计算等技术的发展为人工智能的研究提供了更加广…

怎么做微信预约链接_微信预约新风尚

在快节奏的现代生活中,我们都渴望找到一种既方便又高效的方式来处理日常事务。无论是预约看病、预约美容,还是预约一场心仪的讲座或活动,我们都希望能够一键搞定,省时省力。今天,就让我来为大家揭秘如何制作一个微信预…

Facebook海外企业户/海外企业三不限户稳定性怎么样?

Facebook是做跨境电商卖家最有效的营销工具之一,不过相对的在Facebook上的广告竞争也会越来越激烈。目前外贸行业发展迅速。Facebook作为每天拥有30亿人口的活跃网络平台,约占全球网络用户的30%。平均来说,它的用户愿意每天花60分钟在平台上浏…

美港通正规股票交易市场人民币突然拉升,市场开启“大风车”模式?

查查配今天上午,市场又开启了“大风车”模式,多个热点轮番拉升。 一则关于地产行业利好的小作文流出,地产产业链上午爆发,租售同权、房地产服务、房地产开发等板块大涨,光大嘉宝、天地源等个股涨停。万科A涨超4%。 美港通证券以其专业的服务和较低的管理费用在市场中受到不少…

【上海生物发酵展精选展商】三门峡市高瑞生物技术有限公司

三门峡市高瑞生物技术有限公司注册成立于2017年2月23日,经营范围是微生物培养基原材料制造、销售。2017年度因场地搬迁、异地重建,公司由“三门峡市高山生物制品有限公司”更名为“三门峡市高瑞生物技术有限公司”。 该公司具有20余年丰富经验的微生物培…

对话 Databend Labs 联合创始人王吟:大模型浪潮里,云数仓是宠儿 | 极新企服直播实录

以下文章来源于极新 ,作者王吟 据 IDC 预测,随着企业数字化转型,到 2026 年,中国大数据 IT 支出将达到 360 亿美元。Gartner 预测,得益于托管云服务的推动,到 2023 年,全球数据库市场有望达到 1…

超声波清洗机哪家好一点?四款超一流超声波清洗机大盘点

在追求极致清洁和维护精密工具、设备及珍贵物品的时代,超声波清洗机显得尤为重要。不仅因其高效、快速的清洁效果,更因其能够触及传统手工清洁所不能及的微小缝隙。无论你是珠宝设计师、机械工程师、还是热爱生活的普通家庭用户,超声波清洗机…