热门标签 | 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


推荐阅读
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 在 Swift 编程中,遇到错误提示“一元运算符 '!' 不能应用于 '()' 类型的操作数”,通常是因为尝试对没有返回值的方法或函数应用逻辑非运算符。本文将详细解释该错误的原因,并提供解决方案。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 本文讨论了如何根据特定条件动态显示或隐藏文件上传控件中的默认文本(如“未选择文件”)。通过结合CSS和JavaScript,可以实现更灵活的用户界面。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
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社区 版权所有