Cesium tileset 建筑物贴纹理

  • cesium加载tileset
  • tileset 设置颜色
  • tileset设置customshader
  • 理解customshader里面的一些变量代表的意思

cesium加载tileset

 //这一句代码非常重要,不然自定义的渲染不会生效Cesium.ExperimentalFeatures.enableModelExperimental = true // 必须将这个设为true才能惊醒自定义shadervar tilesets = this.viewer.scene.primitives.add(new Cesium.Cesium3DTileset({url: "Assets/tilesetsWhrite/tileset.json",name: '3Dtiles',// url: this.urls + '/CQKSHMAP/tileset.json',dynamicScreenSpaceErrorDensity: 0.1,// maximumScreenSpaceError: 128, // 默认值16 用于提高细节细化级别的最大屏幕空间错误maximumNumberOfLoadedTiles: 10000000}))

tileset 设置颜色

这里可以设置整体颜色,也可以根据条件来设置颜色,虽然等下建筑物会进行贴图,但是你设置颜色还是会有效果的,会改变建筑物的整体颜色

      tilesets.readyPromise.then(tileset => tileset.style = new Cesium.Cesium3DTileStyle({color: {conditions: [// ['${floor} >= 5', "color('rgb(42, 160, 224)',1)"],// ['${floor} >= 5', 'rgba(255, 255, 255,1)'],['true', "color('rgb(18, 66, 93)',1)"]// ['true',  'color("#C1D8F5",1)']// ['true', "color('rgb(42, 160, 224)',1)"]]}})// viewer.flyTo(tileset);})

tileset设置customshader

     var customShader = new Cesium.CustomShader({// lightingModel: Cesium.LightingModel.UNLIT,//  lightingModel: Cesium.LightingModel.PBR,//设置变量,由顶点着色器传递给片元着色器varyings: {v_normalMC: Cesium.VaryingType.VEC3,v_st: Cesium.VaryingType.VEC3},//外部传给顶点着色器或者片元着色器uniforms: {u_texture: {value: new Cesium.TextureUniform({url: '/Assets/Images/buildWall.jpg'}),type: Cesium.UniformType.SAMPLER_2D},u_texture1: {value: new Cesium.TextureUniform({url: '/Assets/Images/buildWall1.jpg'}),type: Cesium.UniformType.SAMPLER_2D}},//贴纹理//顶点着色器//将法向量从顶点着色器设置变量传给片元着色器vertexShaderText: `void vertexMain(VertexInput vsInput, inout czm_modelVertexOutput vsOutput) {v_normalMC = vsInput.attributes.normalMC;v_st=vsInput.attributes.positionMC ;   }`,//片元着色器fragmentShaderText: `void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {vec3 positionMC = fsInput.attributes.positionMC;//这里是设置要贴图的图片的尺寸,设置小了会重复float width = 37.0;float height = 40.0;vec3 rgb;//这是是设置了屋顶的颜色,当和法向量平行时,就是屋顶,这里设置0.95,相当于垂直,建筑物四周开始贴图if (dot(vec3(0.0, 1.0, 0.0), v_normalMC) > 0.95) {material.diffuse = vec3(1.0, 0.0, 0.0);} else {float textureX = 0.0;float dotYAxis = dot(vec3(0.0, 0.0, 1.0), v_normalMC);// cos(45deg) 约等于 0.71,这里是建筑物四周的向量与法向量会大于四十五度夹角if (dotYAxis > 0.71 || dotYAxis < -0.71) {//x代表的是前后面textureX = mod(positionMC.x, width) / width;} else {//z代表的是左右面textureX = mod(positionMC.z, width) / width;}float textureY = mod(positionMC.y, height) / height;//我这里是根据建筑物高度贴了两张不同的图片if (positionMC.y > 30.0) {rgb = texture2D(u_texture1, vec2(textureX, textureY)).rgb;       } else {rgb = texture2D(u_texture, vec2(textureX, textureY)).rgb;}material.diffuse = rgb;}}` })tilesets.customShader = customShader

理解customshader里面的一些变量代表的意思

这个表可以在https://github.com/CesiumGS/cesium,链接是下图,可以自己去看看

最终结果

注:有时候自己tileset的高度不一定就是position.z,就像我这次的,垂直方向是y,所以要具体情况具体分析,可以更改代码中的xyz的值来达到此效果,具体为什么作者暂时还没有搞清楚,请谅解

Cesium tileset 建筑物贴纹理相关推荐

  1. Cesium实现建筑物泛光特效,使用自定义shader实现源码

    自从Cesium1.87以后的版本,提供了方便的自定义shader的接口,从而不用修改源码,就可以方便的实现很多自定义的特效,这对Cesium的从业人员来说是一个极大的好消息,所用到的接口是 Cesi ...

  2. cesium 3d建筑物光效 泛光实体

    cesium 3d建筑物光效 泛光实体 以下为源码,直接复制粘贴就好 export default class Tilesets {constructor(val) {this.viewer = va ...

  3. Cesium 可变高度+动态纹理水体

    Cesium 可变高度+动态纹理水体 由于任务中的需求,要求使用primitive实体配合动态纹理并且可以进行高度变化,实现一种动态水体的效果. 删除原实体重新添加新实体的方法会影响系统观感. 动态纹 ...

  4. Cesium立体建筑物闪烁效果

    Cesium立体建筑物闪烁效果 实现效果 详情参见 Cesium实战项目

  5. cesium实现建筑物渐变颜色与动态光环效果

    文章目录 1.实现效果 2.实现方法 Cesium实战系列文章总目录: 传送门 1.实现效果 2.实现方法 在常见的可视化过程中,建筑白模一般按楼层高度设色,颜色单一不够美观,这里使用渐变色设置建筑物 ...

  6. Cesium实现建筑物单体化(分栋分层)

    单体化的方式有很多种:切割单体化.重建单体化,本文所介绍的方法为叠加单体化(简单). 基本原理为:对于模型中的每个建筑,事先准备好相应的矢量面数据:在场景中单击模型时,通过获取单击位置的坐标,进而查询 ...

  7. cesium城市建筑物贴图(地图数据篇.12)

    听老人家说:多看美女会长寿 地图之家总目录(建议先查看该内容) 1:全国3D建筑物轮廓可通过bigemap进行下载(该软件收费) 测试数据下载: https://download.csdn.net/d ...

  8. 23.(cesium之家)cesium城市建筑物光效

    听老人家说:多看美女会长寿 cesium之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可"私信"博主. 效果如下所示: 下面献上完整代码 ...

  9. 23.(cesium篇)cesium城市建筑物光效

    地图之家总目录(订阅之前请先查看该博客) 地图之家:cesium+leaflet+echart+地图数据+地图工具等相关内容的介绍 文章末尾处提供保证可运行完整代码包,运行如有问题,可"私信 ...

  10. cesium城市建筑物光效(cesium篇.23)

    听老人家说:多看美女会长寿 地图之家总目录(建议先查看该内容) 文章末尾处提供保证可运行完整代码包,运行如有问题,可"私信"博主. 效果如下所示: 下面献上完整代码,代码重要位置会 ...

最新文章

  1. 独家|深度学习训练和推理之间有什么差异?
  2. final finally finalize 的区别
  3. selenium webdriver你使用的是不受支持的命令行标记
  4. 文件系统管理 之 Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍...
  5. Spark Streaming(二)Flume
  6. How to create and apply a patch with Git
  7. c# DES 加密解密方法
  8. AS报Failed to resolve: junit:junit:4.12错误正确的解决方法
  9. javascript HTMLMediaElement
  10. Actor-Critic:强化学习中的参与者-评价者算法简介
  11. Spring @Validate 报 :No validator could be found for type 异常解決
  12. mangos新手教程 - 服务器配置文件中文说明
  13. PCIe中断--INTx
  14. 【JAVA今法修真】 第五章 练气百日,筑基三年
  15. 创建型模式:工厂方法
  16. 【渝粤题库】广东开放大学 标准文献检索与应用 形成性考核
  17. 如何应对火车站强行乞讨的小孩
  18. 使用canvas实现黑客帝国数字雨
  19. 能在多种前端框架下使用的表格控件
  20. 苹果iOS13系统升降机(图文教程)

热门文章

  1. FFmpeg常见命令行(四):FFmpeg流媒体
  2. 1.2 Java的竞争对手及各自优势
  3. IDE模式下安装Window7,改回achi的方法
  4. 从我干程序员开始 我就不准备干这个行业
  5. 出现错误-未找到要在其中创建新文件系统的有效设备。请检查您的硬件以找到问题的起因。
  6. PSP - HHblits 算法搜索 BFD 与 UniRef30 的结果分析 (bfd_uniref_hits.a3m)
  7. 【JavaEE】网络原理——传输层协议:UDP和TCP
  8. (顶刊)多目标优化解决方案集的质量评估:回顾和综述(多目标领域下相当好的一篇文章)
  9. 深度学习下的图像分割
  10. 浅谈MES的通用设计之二:工艺参数的下载