【Cesium学习(六)】Cesium加载3D模型(3D tiles和glTF模型)

这篇具有很好参考价值的文章主要介绍了【Cesium学习(六)】Cesium加载3D模型(3D tiles和glTF模型)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

前面我们学习到了绘制基本的形状,但是Cesium还可以加载3D模型,因为像高德地图这种的技术来加载大型复杂的建筑模型性能不加,所有只能想Cesium这种专门做3D地图的技术。接下来就学习一下如何加载模型。

技术方案

Cesium目前支持两种模型方案,一个是使用3D tiles, 另一个是加载glTF模型,3D tiles是适用于展示大区域面积的建筑模型,而glTF模型是加载单个独立模型。

实现

一、3D tiles 实现

什么是3D tiles

3DTiles数据集是cesium小组AnalyticlGraphics与2016年3月定义的一种数据集, 3DTiles数据集以分块、分级渲染,将大数据量三维数据以分块,分层的形式组织起来,可以大量减轻浏览器和GPU的负担是一个优秀的,并且格式公开的数据格式。3D Tiles将用于流式传输3D内容,包括建筑物,树木,点云和矢量数据。

准备模型

这里可以使用官网库中的模型,也是找一个tileset.json的网络地址模型或者本地地址模型。

代码实现
let viewer = new Cesium.Viewer('cesiumContainer')
let tileset; //设置一个变量来存放通过3DTiles创建的模型
try {
    tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({ url: 'https://invest.zjw.ningbo.gov.cn/BIM/yzddgj/5/tileset.json' }
    viewer.scene.globe.depthTestAgainstTerrain = true;
    tileset.readyPromise.then(function (tileset) {
        let boundingSphere = tileset.boundingSphere; // 模型的范围
        let cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center); // 从笛卡尔位置创建一个新的位置实例(返回的是一个经纬度的)
        let surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0); // 以经纬度的值来返回Cartesian3(xyz)的位置 ,/
        let offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 50); // 以经纬度的值来返回Cartesian3(xyz)的位置 ,//>
        let translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3()); // 计算两个笛卡尔的分量差异。
        tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
        viewer.zoomTo(tileset);
    });
} catch (error) {
    console.log(`Error loading tileset: ${error}`);
}
运行

cesium加载3d模型,Cesium,学习,3d,前端,webgl

二、glTF模型实现

GLTF代表Graphics Language Transmission Format(图形语言传输格式)。这种跨平台格式已成为Web上的3D对象标准。它由OpenGL和Vulkan背后的3D图形标准组织Khronos所定义,这使得GLTF基本上成为3D模型的JPG格式:Web导出的通用标准。

准备模型

在下载的Cesium文件里面,可以找到一个models文件,里面都是模型
cesium加载3d模型,Cesium,学习,3d,前端,webgl

代码实现

gltf模型有两种实现代码实现,一是使用前面的entity方式来加载,还有一个是通过CZML方式来加载模型。
一、entity方式

var entity = viewer.entities.add({
    id: 'myEntity',
    position: position, //模型的位置
    orientation: orientation_air,
    model: {
        uri: require('../../public/models/CesiumAir/Cesium_Air.glb'),
        minimumPixelSize: 500,
        maximumScale: 10000,
        show: true,
    },
});
// 让摄像机视口快速定位到模型位置
 viewer.trackedEntity = entity;

二、CZML方式

        name: '3DModel',
        version: '1.0',
    },
    {
        id: 'airplane_model',
        name: 'airplane',
        position: {
            cartographicDegrees: [-77, 37, 10000],
        },
        model: {
            gltf: require('../../public/models/CesiumAir/Cesium_Air.glb'),
            scale: 2.0,
            minimumPixelSize: 128,
        },
    },
];
//> 添加模型
const dataSourcePromise = viewer.dataSources.add(Cesium.CzmlDataSource.load(czml));
dataSourcePromise
    .then(function (dataSource) {
        viewer.trackedEntity = dataSource.entities.getById('airplane_model');
    })
    .catch(function (error) {
        console.log(error);
    });
运行

cesium加载3d模型,Cesium,学习,3d,前端,webgl文章来源地址https://www.toymoban.com/news/detail-734198.html

到了这里,关于【Cesium学习(六)】Cesium加载3D模型(3D tiles和glTF模型)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • cesium内部相同坐标在不同高度的2个点的属性机制坐标会gltf模型角度值异常问题mars3d的处理办法

    模型一直向上运动的正常效果: 问题场景: 1.new mars3d.graphic.ModelPrimitive({使用addDynamicPosition(设置并添加动画轨迹位置,按“指定时间”运动到达“指定位置”时发现,如果是同一个点位不同高度值的y轴竖直向上方向的运动。 指定pitch:270偏转角度的时候,会出现模型的角度值

    2024年01月18日
    浏览(28)
  • 三维GIS开发:利用Cesium加载 M3D 地质体模型(附代码)

    实现步骤 Step 1.  引用开发库 : 本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; Step 2.  创建布局 : 创建 id=\\\'GlobeView\\\' 的 div 作为三维视图的容器,并设置其样式; Step 3.  构造三维场景控件 : 实例化 Cesium.WebSceneControl 对象,完成

    2024年02月10日
    浏览(28)
  • Cesium 问题:加载 gltf 格式的模型之后太小,如何让相机视角拉近

    刚加载的模型太小,如何拉近视角放大 在这里有两种方式进行拉近视角, 一种是点击复位进行视角拉近 一种是刚加载就直接拉近视角

    2024年02月22日
    浏览(48)
  • Mars3D与mars3d-cesium版本间兼容造成3dtiles和gltf数据处理相关记录

    说明: 1.在引入Mars3D SDK后正常可以在F12打印的信息中可以看到Mars3D和Cesium版本信息。 2.在项目的package.json文件中同样可以看到安装后的版本号。 Mars3D对Cesium版本对应关系: 1.正常情况下mars3d依赖的cesium均是最新版本,并且对cesium版本无特殊要求,版本间均是兼容的,因为c

    2024年02月02日
    浏览(30)
  • 前端使用Cesium加载三维模型全攻略

    想象一下,地球在你眼前旋转,上面还有各种3D模型,是不是很酷?Cesium是一个超酷的库,专门用来创建超炫的3D地球和地图。好,言归正传,今天这篇文章就分享一下前端如何使用Cesium加载三维模型。 首先,确保你已经安装了Cesium库。可以从Cesium官网下载最新版本的库文件

    2024年04月17日
    浏览(29)
  • three.js加载3D模型,在网页上展示3D模型(.glb.gltf.fbx格式)

    Three.js是一款开源的主流3D绘图JS引擎,简单点,可以将它理解为three+js就可以了,three表示3D,js表示JavaScript的意思。 结构  .glb.gltf文件最好放在服务器上 放在本地容易报找不到的错 .fbx格式文件可以在本地用3d看图(win10自带)打开另存为.glb格式 index.html代码 js代码 项目案例

    2024年02月11日
    浏览(36)
  • 如何使用 ThreeJs 以 glTF、FBX 和 OBJ 文件格式加载 3D 模型,使用 ThreeJS 加载和显示带有纹理的 3D 模型

    在本文中,我展示了如何使用 ThreeJS 在 Web 视图中加载 3D 模型。Three.js 是一个跨浏览器的 JavaScript 库和应用程序编程接口,用于使用 WebGL 在 Web 浏览器中创建和显示动画 3D 计算机图形。加载不完整的原因有很多,例如纹理和材质渲染不正确。 创建场景 渲染场景 动画立方体

    2023年04月08日
    浏览(38)
  • DEJA_VU3D - Cesium功能集 之 034-可视域分析(纯前端)完整版

    编写这个专栏主要目的是对工作之中基于Cesium实现过的功能进行整合,有自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有实现130个左右的功能,后续也会不断的追加,所以暂时打算一周2-3更的样子来更新本专栏(每篇博文都会奉上完整demo的源代码,尽可

    2024年02月14日
    浏览(29)
  • uniapp通过renderjs加载3D模型,支持FBX、GLB和GLTF模型,模型可自动适应。

    n-text-loading是我的自定义loading组件,可以自行替换 id是threeView是模型显示的位置, props里面的url是模型链接,cameraZ是相机位置,默认100,一般不需要改,有些z轴很长的模型旋转的时候会有一部分相机看不到这个时候就需要调整这个值了,这两个要从后台上传。 :prop=“url”,

    2024年02月14日
    浏览(30)
  • Cesium 实战 - 使用 gltf-vscode 查看、预览以及编辑 glTF 和 GLB 模型

    模型渲染作为 Cesium 一个非常重要的功能,目前 只支持 glTF 和 GLB 两种格式,其实是一种格式 ,GLB 是 glTF 的二进制形式。 在实际项目中,由于对模型的操作,可能会需要查看模型的属性。之前一直使用 blender 来查看、调整以及转换等操作。模型转换详见:Cesium 三维模型使用

    2024年02月11日
    浏览(79)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包