mars3d实现gltf模型new mars3d.graphic.ModelPrimitive({的自定义shader

news2025/1/19 8:27:14

原模型展示:

自定义shader效果展示:

运动状态下:

关键代码:

const pointCloudWaveShader = new Cesium.CustomShader({
    uniforms: {
      u_time: {
        type: Cesium.UniformType.FLOAT,
        value: 0
      }
    },
    vertexShaderText: `
        void vertexMain(VertexInput vsInput, inout czm_modelVertexOutput vsOutput)
        {
          // 这个模型的x和y坐标在[0,1]的范围内 方便地加倍作为UV坐标。
          vec2 uv = vsInput.attributes.positionMC.xy;
          // 使点云在空间和时间上都变化的复杂波中波动。振幅是基于点云的原始形状(它已经是一个波浪形表面)。波是相对于模型中心计算的,因此转换从[0,1]-> [- 1,1]-> [0,1]
          float amplitude = 2.0 * vsInput.attributes.positionMC.z - 1.0;
          float wave = amplitude * sin(2.0 * czm_pi * uv.x - 2.0 * u_time) * sin(u_time);
          vsOutput.positionMC.z = 0.5 + 0.5 * wave;
          // 通过改变点的大小,使点脉冲进出
          vsOutput.pointSize = 10.0 + 5.0 * sin(u_time);
        } `,
    fragmentShaderText: `
        void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material)
        {
            // 把这些点做成圆形而不是方形
            float distance = length(gl_PointCoord - 0.5);
            if (distance > 0.5) {
                discard;
            }
            // 制作一个正弦调色板,沿波的大致方向移动,但速度不同。系数是任意选择的。
            vec2 uv = fsInput.attributes.positionMC.xy;
            material.diffuse = 0.2 * fsInput.attributes.color_0.rgb;
            material.diffuse += vec3(0.2, 0.3, 0.4) + vec3(0.2, 0.3, 0.4) * sin(2.0 * czm_pi * vec3(3.0, 2.0, 1.0) * uv.x - 3.0 * u_time);
        }`
  })
  // 监听postUpdate,来演示修改uniforms变量
  const startTime = performance.now()
  setInterval(() => {
    const elapsedTimeSeconds = (performance.now() - startTime) / 1000
    pointCloudWaveShader.setUniform("u_time", elapsedTimeSeconds)
  }, 200)

将自定义的shader传入new mars3d.graphic.ModelPrimitive({的style样式信息中:

关键代码参考:

const graphicModel = new mars3d.graphic.ModelPrimitive({
    position: new mars3d.LngLatPoint(116.35265, 30.860337, 364.3),
    style: {
      url: "//data.mars3d.cn/gltf/sample/PointCloudWave/PointCloudWave.glb",
      scale: 30,
      customShader: pointCloudWaveShader
    },
    attr: { remark: "示例5" }
  })

将定义好的矢量数据graphicModel加到矢量图层上:

关键代码:

  graphicLayer.addGraphic(graphicModel)

效果演示链接:

功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技

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

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

相关文章

【全开源】房屋出租出售预约系统支持微信小程序+H5+APP

一款基于FastAdminThinkPHPUniapp开发的房屋出租出售预约系统,支持小程序、H5、APP;包含房客、房东(高级授权)、经纪人(高级授权)三种身份。核心功能有:新盘销售、房屋租赁、地图找房、小区找房,地铁找房等方式。 特色功能&#…

XML解析 之 DomFourJ解析

1,DomFourJ干嘛的? 百度一搜一大堆而且说的很繁琐,在这总结一句话: dom4j就是一个Java用来读写XML文件的API,而且简单又方便还好用 2,什么时候用? 不管读取什么XML文档只要你想用就用没啥限制…

浅谈工业用LED面光源

在机器视觉系统中,光源作为不可或缺的一部分,能够提高目标成像效果,增强检测效果。光源的选择至关重要,选到不合适的会影响成像及检测效果。针对不同的检测对象,不同的形状光源应运而生。我们来看看最常用的LED光源之一——面光源…

『 Linux 』重定向 Redirect(万字)

文章目录 🧸 什么是重定向🐡 文件描述符的分配规则🐡 重定向在日常使用中的简单示例 🧸 实现重定向的底层机制🐡 dup2()🐡 利用dup2()实现重定向 🧸 在自定义Shell当中添加重定向功能&#x1f4…

【Neo4jJDK开箱即用的安装全流程】

neo4j:命令行本地访问loclhost neo4j:命令行本地访问loclhost2 neo4j操作 Neo4j桌面版数据库导出导入 Neo4j安装与配置以及JDK安装与配置教程(超详细) Neo4j 安装、使用教程 Neo4j安装教程 Neo4J桌面版的配置和连接Pycharm jdk-neo对应版本 JDK ORACLE中…

2024/5/14 英语每日一段

“It is important as it suggests that possibly several populations in the world already started to include substantial amount of plants in their diet” in the period before agriculture was developed, a view contradictory to the popular one, added archeo-ge…

全网最通俗易懂的vue透传

概念: Vue的透传是指在Vue组件中,使用特定的语法将父组件传递的属性或事件直接传递给子组件,实现了通过父组件传递数据或事件,再传递给子组件的功能。(传递给一个组件,却没有被该组件声明为 props 或 emit…

2024年前一季度,国内医疗器械营收TOP10出炉!

随着国内医疗器械市场的不断发展,各大医疗器械公司的财报数据成为了投资者和行业观察者关注的焦点。近日,根据2024年第一季度财报数据,我们梳理出了中国医疗器械第一财季营收排名前十的械企,为大家带来深入的分析和解读。 一、营…

算法课程笔记——路径相关树形DP

算法课程笔记——路径相关树形DP #include<bits/stdc.h>usingnamespacestd; usingLL longlong; constintN 2005; vector<int>e[N],t; structasdf{vector<int> vec; LL val; }; vector<asdf>w[N]; LL dp[N]; intn,m,k,dep[N]{1},f[N]; voiddfs(in…

图生视频,Stable Diffusion WebUI Forge内置SVD了!

在 Stable Diffusion WebUI Forge 版本中内置了一个SVD插件&#xff0c;也就是 Stable Video Diffusion&#xff08;稳定视频扩散&#xff09;&#xff0c;之前我介绍过这个工具的使用方法&#xff1a;图片生成视频&#xff08;独立部署SVD) 但是当时还不能集成到Stable Diffu…

【代码阅读】SalsaNext

最近在找轻量级的语义分割模型&#xff0c;SalsaNext作为一个很经典的语义分割网络&#xff0c;在服务器的2080上面能够达到30毫秒一帧左右的推理速度&#xff0c;但是其网络本身提出的时间比较久远&#xff0c;后处理的部分使用的依然是最经典的knn&#xff0c;fidnet的后处理…

【已解决】attributeerror: ‘FreeTypeFont‘ object has no attribute ‘getsize‘

&#x1f60e; 作者介绍&#xff1a;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff0c;视频号&#xff1a;AI-行者Sun &#x1f388; 本文专栏&#xff1a;本文收录于《AI实战中的各种bug…

Spring Cloud 概述及项目创建

本篇主要介绍什么是Spring Cloud&#xff0c;以及Spring Cloud工程的创建 目录 一、什么是微服务&#xff1f; 集群 分布式 微服务 二、Spring Cloud 什么是Spring Cloud Spring Cloud 版本 Spring Cloud实现方案 Spring Cloud 工程创建 创建父工程 创建子工程 一、…

对文本框做字数限制

效果图 实现步骤 其中绝对布局根据需求自行调整 <!--单文本输入框--> <div class"form-group"><label class"col-sm-2 control-label is-required">面试公司&#xff1a;</label><div class"col-sm-9"><input …

【原创】springboot+mysql校园宿舍报修管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

日志:打印技巧

一、概览 Unity日志打印技巧 常规日志打印彩色日志日志存储与上传日志开关日志双击溯源 二、常规日志打印 1、打印Hello World 调用堆栈可以很好的帮助我们定位问题&#xff0c;特别是报错的Error日志 Debug.Log("Hello World");Debug.Log("This is a log m…

【Linux】线程机制解析:理解、优势与Linux系统应用

文章目录 前言&#xff1a;1. 线程概念1.1. 什么是线程1.2. 线程得优点&#xff1a;1.3. 线程的缺点线程异常线程的用途 2. 线程的理解&#xff08;Linux 系统为例&#xff09;2.1. 为什么要设计Linux“线程"&#xff1f;2.2. 什么是进程&#xff1f;2.3. 关于调度的问题2…

图像归一化处理

归一化 归一化是一种简化计算的方式&#xff0c;即将有量纲的表达式&#xff0c;经过变换&#xff0c;化为无量纲的表达式&#xff0c;成为标量。 在多种计算中都经常用到这种方法。 简单介绍 归一化是一种无量纲处理手段&#xff0c;使物理系统数值的绝对值变成某种相对值关…

IDEA报错:java 找不到符号

IDEA报错:java 找不到符号,代码没问题,IDEA缓存也清理了也重新构建了就是不行 最后使用终极大法 -Djps.track.ap.dependenciesfalse

Eclipse 里如何建立SAP应用服务层的CDS

关于Core Data Service(CDS) CDS:Core Data Ser vice.核心数据服务。CDS 是使用基于 SQL的数据定义语言(DDL)定义的&#xff0c;该语言基于标准 SQL 并带有一些附加概念。使用类似 SQL的灵活表达式可以进行复杂的数据建模。有两种类型的 CDS:ABAP CDS 和 HANA CDS。 S/4 HANA…