热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SuerMapClient3DforWebGL实例化图层数据加载

翔翔什么叫实例化呢?在博客https:blog.csdn.netu012874078articledetails93898926中解释了什么叫实例化。本文主要介绍在W

翔翔

    什么叫实例化呢?在博客 https://blog.csdn.net/u012874078/article/details/93898926 中解释了什么叫实例化。本文主要介绍在WebGL中如何实现实例化效果。
    在超图WebGL中,实例化图层名字叫InstanceLayer。首先我将全部代码贴出来,然后再详细讲解其中的属性。代码如下:

function AddModelToInstanceLayer() {var instanceLayer &#61; new Cesium.InstanceLayer(scene._context);scene.primitives.add(instanceLayer);// 最大最小可见高度控制图层显隐instanceLayer.minVisibleAltitude &#61; 0;instanceLayer.maxVisibleAltitude &#61; 10000;// 根据像素控制模型可见// instanceLayer.filterMode &#61; 1;// instanceLayer.filterPixel &#61; 20; // 根据距离控制模型可见instanceLayer.filterMode &#61; 0;instanceLayer.filterDistance &#61; 1000;instanceLayer.pickEnable &#61; true;instanceLayer.selectedColor &#61; Cesium.Color.RED;instanceLayer.tileWidth &#61; 500;Cesium.loadJson(&#39;./实例化/Position.json&#39;).then(function(jsonData) {console.log(jsonData);var instances &#61; jsonData.features;for (var i &#61; 0; i < instances.length; i&#43;&#43;) {var LocalMatrix &#61; jsonData.features[i].properties.Matrix;var matrixstr &#61; LocalMatrix.split("#");var matrix4d &#61; new Cesium.Matrix4(Number(matrixstr[0]), Number(matrixstr[4]), Number(matrixstr[8]), Number(matrixstr[12]),Number(matrixstr[1]), Number(matrixstr[5]), Number(matrixstr[9]), Number(matrixstr[13]),Number(matrixstr[2]), Number(matrixstr[6]), Number(matrixstr[10]), Number(matrixstr[14]),Number(matrixstr[3]), Number(matrixstr[7]), Number(matrixstr[11]), Number(matrixstr[15]));var state &#61; {id: i,position: Cesium.Cartesian3.fromDegrees(Number(jsonData.features[i].geometry.coordinates[0]),Number(jsonData.features[i].geometry.coordinates[1]),Number(jsonData.features[i].properties.Z)),}// arr.push(state);var modelurl &#61; &#39;实例化/&#39; &#43; jsonData.features[i].properties.ModelName &#43; &#39;.s3mb&#39;;instanceLayer.add(modelurl, state);instanceLayer.getInstance(modelurl, i).updateModelMatrix(matrix4d);}})
}

   首先需要初始化InstanceLayer&#xff0c;然后再将InstanceLayer添加到primitives里面。
   minVisibleAltitude&#xff1a; 最小可见高度&#xff0c;当小于该高度时&#xff0c;图层整体不可见。
   maxVisibleAltitude&#xff1a; 最大可见高度&#xff0c;当大于该高度时&#xff0c;图层整体不可见。
   filterMode&#xff1a; 过滤模式&#xff0c;如果为1 则是像素过滤&#xff1b;如果为0 则为距离过滤。默认为像素过滤
   filterPixel&#xff1a; 像素过滤阈值&#xff0c;此时filterMode设置为1有效。比如设置为20&#xff0c;当模型对象小于该阈值时&#xff0c;整个tileWidth中的所有对象不可见。
   filterDistance&#xff1a; 距离过滤阈值&#xff0c;此时filterMode设置为0有效。比如设置为100米&#xff0c;当tileWidth与相机的距离小于该值时&#xff0c;整个tileWidth不可见。
   tileWidth&#xff1a; 块大小。如果熟悉超图iDesktop的话&#xff0c;这个值应该不陌生。既将该图层按照该大小来划分显示&#xff0c;如果一个块大小中的数据量太大&#xff08;三角面片数过多&#xff09;那么块大小要适当设置小&#xff1b;反之亦然。
   pickEnable&#xff1a; 是否可选择。
   selectedColor&#xff1a; 选中对象的颜色。
   通过add(modelurl,state)方法可以向instanceLayer中添加模型对象。modelurl是模型的相对路径&#xff1b;state是当前对象的状态&#xff0c;主要包括位置、id等属性。id是该模型的唯一标识。
   在上诉代码中有一个很重要的一点&#xff0c;设置模型对象的矩阵。其代码为&#xff1a;instanceLayer.getInstance(modelurl, i).updateModelMatrix(matrix4d);
   矩阵主要是设置对象的旋转、缩放和平移。该属性是模型对象的一个重要属性。在WebGL中的Matrix4是一个4*4的一维数组&#xff0c;详细的参数可参考WebGL的api。我们在iDesktop中设置的矩阵数组和WebGL中有一点差别&#xff0c;如果还是按照给定的数组去更新&#xff0c;那么会出现不可预期的旋转缩放平移。此时初始化矩阵时需要按照上面代码中的初始化就没问题了。
   最后添加到WebGL中的效果&#xff1a;
在这里插入图片描述
范例下载地址

本文转载地址&#xff1a;https://blog.csdn.net/u012874078/article/details/105195784


推荐阅读
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 热血合击脚本辅助工具及随机数生成器源码分享
    本文分享了一个热血合击脚本辅助工具及随机数生成器源码。游戏脚本能够实现类似真实玩家的操作,但信息量有限且操作不可控。热血合击脚本辅助工具可以帮助玩家自动刷图、换图拉怪等操作,并提供了雷电云手机的扩展服务。此外,还介绍了使用mt_rand函数作为随机数生成器的代码示例。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 本文介绍了Java中Currency类的getInstance()方法,该方法用于检索给定货币代码的该货币的实例。文章详细解释了方法的语法、参数、返回值和异常,并提供了一个示例程序来说明该方法的工作原理。 ... [详细]
author-avatar
赵乙潘_107
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有