首页 > 其他分享 >cesium教程4-用entity加载glb和gltf格式的小模型

cesium教程4-用entity加载glb和gltf格式的小模型

时间:2022-08-23 16:45:55浏览次数:48  
标签:viewer glb var entity Cesium pitch cesium true heading

 

 html示例如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>cesium示例</title>
  <!-- 引用cesium的js和css,天地图的扩展js -->
  <script src="https://cesium.com/downloads/cesiumjs/releases/1.92/Build/Cesium/Cesium.js"></script>
  <link rel="stylesheet" href="https://cesium.com/downloads/cesiumjs/releases/1.92/Build/Cesium/Widgets/widgets.css"/>
  <script src="http://api.tianditu.gov.cn/cdn/plugins/cesium/cesiumTdt.js" ></script>
  <style type="text/css">
    html, body, #tiandituContainer {
      width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden;
    }
  </style>
 
</head>
<body onl oad="loadData()">
<div id="tiandituContainer">
</div>
<script>
    
  //Cesium官网注册后的授权token,没有token不能使用cesium在线的地形服务,这里需要改成自己的token
  Cesium.Ion.defaultAccessToken = "";
  
  var viewer;
   function loadData()
   {
       //默认会调用微软virtualearth地图
        viewer = new Cesium.Viewer('tiandituContainer',{
          animation:false,       //是否显示动画控件
          homeButton:true,       //是否显示home键
          geocoder:true,         //是否显示地名查找控件,如果设置为true,则无法查询
          baseLayerPicker:true, //是否显示图层选择控件
          timeline:false,        //是否显示时间线控件
          fullscreenButton:true, //是否全屏显示
          infoBox:true,         //是否显示点击要素之后显示的信息
          sceneModePicker:true,  //是否显示投影方式控件  三维/二维
          navigationInstructionsInitiallyVisible:false, //导航指令
          navigationHelpButton:false,     //是否显示帮助信息控件
          selectionIndicator:false, //是否显示指示器组件
        });
        //隐藏cesium的logo
        viewer._cesiumWidget._creditContainer.style.display = "none"; 
        //默认的Cesium会加载一个bingMap底图,这个地图网络不太好,一般要先去掉这个默认的
        viewer.imageryLayers.remove(viewer.imageryLayers.get(0));
        
        //arcgis在线影像地图
        viewer.imageryLayers.addImageryProvider(new Cesium.ArcGisMapServerImageryProvider({
            name:"img_arcgis",
            url:"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"
        }));
         
         viewer.scene.globe.depthTestAgainstTerrain = true;//地形遮挡效果开关,打开后地形会遮挡看不到的区域
         viewer.scene.globe.enableLighting = true; //对大气和雾启用动态照明效果
       
          //加载小模型
          add3DEntityModel("https://data.mars3d.cn/gltf/mars/feiji.glb",120.131292,30.471157,0,-17,0,0);
            
          // 将三维球定位到中国
          viewer.camera.flyTo({
              destination: Cesium.Cartesian3.fromDegrees(120.132072,30.471217, 2000),
              orientation: {
                  heading :  Cesium.Math.toRadians(348.4202942851978),
                  pitch : Cesium.Math.toRadians(-89.74026687972041),
                  roll : Cesium.Math.toRadians(0)
              },
              complete:function callback() {
                  // 定位完成之后的回调函数
              }
          });
   }
   function add3DEntityModel(url,longitude,latitude,height,v_heading,v_pitch,v_roll) {
           viewer.entities.removeAll();
   
           var position = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);
           var heading = Cesium.Math.toRadians(v_heading);
           var pitch = Cesium.Math.toRadians(v_pitch);
           var roll = Cesium.Math.toRadians(v_roll);
           var hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);
           var orientation = Cesium.Transforms.headingPitchRollQuaternion(position, hpr);
   
           var entity = viewer.entities.add({
               name : url,
               position : position,
               orientation : orientation,
               model : {
                   uri : url,
                   minimumPixelSize : 128,
                   maximumScale : 20000
               }
           });
           //取或设置相机当前正在跟踪的Entity实例。
           //viewer.trackedEntity = entity;
       }
   
        
            
</script>
</body>
</html>

相关说明:

//destination是相机的目标位置,参数是经度、纬度、高度
//orientation是相机朝向
//    heading-代表镜头左右方向,正值为右,负值为左
//    pitch-代表镜头上下方向,正值为上,负值为下.
//    roll-代表镜头左右倾斜,正值,向右倾斜,负值向左倾斜

 

heading-代表镜头左右方向,正值为右,负值为左,360度和0度是一样的
pitch-代表镜头上下方向,正值为上,负值为下.
roll-代表镜头左右倾斜.正值,向右倾斜,负值向左倾斜

 

标签:viewer,glb,var,entity,Cesium,pitch,cesium,true,heading
From: https://www.cnblogs.com/tiandi/p/16616815.html

相关文章

  • Cesium 粒子系统
    粒子系统的本质是向场景中添加了很多物体,用BillBoard技术展现。这种实现方式有一个麻烦的地方就是当视角变化(拉近、拉远、平移、旋转)时,粒子就会变化,甚至会消失,影响体验。......
  • CAD二次开发---关于JoinEntity出现eNotApplicable的问题
    作者在使用JoinEntity时出现eNotApplicable的问题,查阅了Autodesk论坛的相关帖子,发现大多数人都有遇到这个问题,但没有找到合适的解决方法,可能原因是进行Join时两Curve需要同......
  • the server responded with a status of 413 (Request Entity Too Large) 解决
    前端上传文件,本地测试好的,放到服务器上出现了这个错误:theserverrespondedwithastatusof413(RequestEntityTooLarge)问题原因:服务器上使用了nginx,是nginx做了大......
  • umi框架配置loader加载glb模型
    项目需要,第一次使用umi框架,加载glb模型一直失败,创建新的react项目测试加载模型,完全没问题。那问题就出在umi的配置上了,翻遍网络只有一位博主写到过如何配置loader加载glb......
  • cesium模型的本地加载模型
    需求目前有一个需求就是需要从本地拖拽glb文件模型到cesium地球中显示模型由于相关js库较多本文章就不涉及拖拽功能了思路第一种方案cesium通过Model.fromGltf函数来......
  • Entity Framework Classic Include
    EntityFrameworkClassic IncludeTheIncludemethodletsyouaddrelatedentitiestothequeryresult.InEFClassic,theIncludemethodnolongerreturnsan......
  • cesium基础-加载影像
    ImageryLayerCollection类Cesium.Viewer类对象中包含的imageryLayers属性就是ImageryLayerCollection类的实例,它包含了当前Cesium应用程序所有的ImageryLayer类对象,即所有......
  • 20220816 springboot_idea_lombok_转Entity 生成的ToDominObject没有用有参构造方
    1问题:使用lombok,DDD设计思想整合mapStruct时,转Entity生成的ToDominObject没有用有参构造方法构造对象 2解决方案:2.1未解决_原因猜想因为生......
  • cesium教程3-加载3dtile模型,并调整位置
      直接上示例代码:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>cesium示例</title><!--引用cesium的js和css,天地图的扩展js-->......
  • cesium教程2-加载显示地形地图
      上面地形数据,是调用cesium官方的地图服务,需要先注册cesium账户,配置cesium的账户token才行1、在线地形服务的示例代码如下<!DOCTYPEhtml><htmllang="en"><head......