Cesium支持3D模型,包括关键帧动画,皮肤的改变还有单个节点的选择等,Cesium还提供了了一个基于网络的工具,将COLLADA模型转换为glTF,方便和优化模型添加

还记得我们在实体添加的时候添加过一个3D模型么,具体是这样的

var viewer = new Cesium.Viewer('cesiumContainer');
var entity = viewer.entities.add({position : Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706), model : { uri : '../../SampleData/models/CesiumGround/Cesium_Ground.gltf' } }); viewer.trackedEntity = entity;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

我们将3D模型直接以实体的形式添加进去,效果很不错,这次我们换种形式

var viewer = new Cesium.Viewer('cesiumContainer');
var scene = viewer.scene;
var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame( Cesium.Cartesian3.fromDegrees(-75.62898254394531, 40.02804946899414, 0.0)); var model = scene.primitives.add(Cesium.Model.fromGltf({ url : '../Apps/SampleData/models/CesiumGround/Cesium_Ground.gltf', modelMatrix : modelMatrix, minimumPixelSize : 512, maximumScale : 200000 }));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

你会发现这个模型却没有自带动画效果,让我们来给他加上动画

Cesium.when(model.readyPromise).then(function(model) {model.activeAnimations.addAll({ //永久重复 loop : Cesium.ModelAnimationLoop.REPEAT }); });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这时候就有动画效果了,这个动画效果我们也是可以控制的,比如让它慢一点或者回放一遍

model.activeAnimations.addAll({loop : Cesium.ModelAnimationLoop.REPEAT,//这个半速是相对于Cesium的clock来说的speedup : 0.5, reverse : true });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

那么这两种方法有什么区别呢?

追溯一下源码可以发现,其实用实体(entities)创建的3D模型最终通过GeometryInstance转化成了primitives,也就是说两者根本上是一样的,不过用实体方式创建会更简单一点。

顺带稍微查了下,用实体方式创建因为在用GeometryInstance会进行一个分类处理,能够充分利用GPU性能,所以在性能上还会更优化一些

我们还可以精准的选择3D模型上的一个个小的部件

//获得当前鼠标在模型上触碰位置的名字
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function (movement) { //当鼠标移动时获取移动的末位置 var pick = scene.pick(movement.endPosition); //简单来说就是这个点上有东西,那就打log if (Cesium.defined(pick) && Cesium.defined(pick.node) && Cesium.defined(pick.mesh)) { console.log('node: ' + pick.node.name + '. mesh: ' + pick.mesh.name); } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE );
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

可以看到控制台把每个部件的名字都打印出来了

Cesium还为我们提供了一个检查器,我们可以通过这个检查器来查看我们模型的边界、轴坐标等,当前这个检查器的功能不止在3D模型上,还有拾取当前点的经纬度等其他功能

viewer.extend(Cesium.viewerCesiumInspectorMixin);
  • 1
  • 1

只需要一行就可以开启

点开primitives,pick我们这个模型就可以了

我们还可以给模型改变一下属性

var viewer = new Cesium.Viewer('cesiumContainer')
var entity = viewer.entities.add({position : Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706), model : { uri : '../../SampleData/models/CesiumGround/Cesium_Ground.gltf', //模型颜色,透明度 color : Cesium.Color.fromAlpha(Cesium.Color.RED, parseFloat(0.5)), //轮廓线 silhouetteColor : Cesium.Color.fromAlpha(Cesium.Color.GREEN, parseFloat(0.5)), //模型样式['Highlight', 'Replace', 'Mix'] colorBlendMode : Cesium.ColorBlendMode.MIX, //colorBlendAmount需要选择mix后将colorBlendAmountEnabled设置为true才能使用 colorBlendAmountEnabled : true, colorBlendAmount : parseFloat(0.8) } }); viewer.trackedEntity = entity;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

转载于:https://www.cnblogs.com/yanan-boke/p/7422863.html

Cesium学习笔记(五):3D 模型 (http://blog.csdn.net/umgsoil/article/details/74572877)相关推荐

  1. 学习mongoDB的一些感受(转自:http://blog.csdn.net/liusong0605/article/details/11581019)

    曾经使用过mongoDB来保存文件,最一开始,只是想总结一下在开发中如何实现文件与mongoDB之间的交互.在此之前,并没有系统的了解过mongoDB,虽然知道我们用它来存储文件这些非结构化数据,但是 ...

  2. 从最大似然到EM算法浅解 http://blog.csdn.net/zouxy09/article/details/8537620

    1. EM blog的举例就是group 然后就是每个group的function很有效地串联所学的知识,看到的论文,所有的思考,都是有一定的逻辑关系,如何逐渐develop你的想法,都是有一定的源头 ...

  3. 系统权限管理设计 (转:http://blog.csdn.net/chexlong/article/details/37697555)

    权限设计(转:http://blog.csdn.net/chexlong/article/details/37697555)      1. 前言:      权限管理往往是一个极其复杂的问题,但也可 ...

  4. http://blog.csdn.net/LANGXINLEN/article/details/50421988

    GitHub上史上最全的Android开源项目分类汇总 今天在看博客的时候,无意中发现了 @Trinea在GitHub上的一个项目 Android开源项目分类汇总, 由于类容太多了,我没有一个个完整地 ...

  5. GitHub 优秀的 Android 开源项目 转自http://blog.csdn.net/shulianghan/article/details/18046021

    原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea 主要介绍那些不错个性化的View,包括Lis ...

  6. VBS 常用总汇 (http://blog.csdn.net/sgear/article/details/1380223)

    VBS 常用总汇 (http://blog.csdn.net/sgear/article/details/1380223) 1 VBS    VBS脚本病毒的大量流行使我们对VBS的功能有了一个全新的 ...

  7. Android Volley完全解析(二),使用Volley加载网络图片 转载:http://blog.csdn.net/guolin_blog/article/details/174

    转载:http://blog.csdn.net/guolin_blog/article/details/17482165 在上一篇文章中,我们了解了Volley到底是什么,以及它的基本用法.本篇文章中 ...

  8. http://blog.csdn.net/neiloid/article/details/7037093#

    1. 显示系统中全部Android平台: android list targets 2. 显示系统中全部AVD(模拟器): android list avd 3. 创建AVD(模拟器): androi ...

  9. 嵌入式c程序易错点(转自http://blog.csdn.net/zhzht19861011/article/details/45508029)

    今天第一次在网上发表博客,虽然是转载的别人的文章,但还是有点小激动.转载的这篇文章里提到的问题很多都自己亲自踩过,有个别还踩过多次(感觉自己有点傻),也许是亲生经历的原因,看完后果断的转了,以后可以经 ...

最新文章

  1. Supervisor 进程管理工具
  2. 【简译】关于依赖反转原则、控制反转和依赖注入的抽象的初学者指南
  3. org.apache.jasper.JasperException: Unable to compile class for JSP
  4. 胡珀:从危到机,AI 时代下的安全挑战
  5. oppoJava面试!传智播客java基础案例教程
  6. 关于抓包出现TCP DUP ACK问题
  7. 设计师中国风作品必备汉字毛笔字偏旁部首大集合
  8. 转]@SuppressWarnings 详解
  9. AJAX核心对象-- XMLHttpRequest 对象使用详解 (一)
  10. MyBatis之使用XML配置SQL映射(二)CRUD映射配置
  11. redis 数据结构笔记
  12. 2021华为软挑-成渝复赛复盘
  13. spark core源码分析16 Shuffle详解-读流程
  14. 程序员职业生涯系列:关于技术能力的思考与总结
  15. matlab 帕多瓦数列 通项公式_matlab通分.ppt
  16. 轮播图和导航栏:Vue和JavaScript分别实现
  17. 计算机屏保密码失效,Win7屏幕保护失效了怎么办 win7屏幕保护程序失效的解决方法...
  18. 老九课堂c语言百度云,老九学堂C语言
  19. Geode中使用PDX序列化最佳实践
  20. excel表格生成图片的方式

热门文章

  1. linux安装包文件格式,linux多种安装包格式的安装方法
  2. 连接远程mongodb_在centos6.9安装mongodb
  3. BIG-IP系统进程介绍
  4. JAVA编码规约(阿里)
  5. java科学计数字符串显示
  6. Nginx —— nginx负载均衡的详细配置 以及 使用案例详解.
  7. CentOS忘记密码
  8. 转:MySQL性能优化神器Explain使用分析
  9. .net平台下C#socket通信(中)
  10. iOS--SDAutolayout宽度自适应