5、加载3dtileset模型并定位到模型

这篇具有很好参考价值的文章主要介绍了5、加载3dtileset模型并定位到模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

      这一节使用CCesium加载3dtiles模型,3dtiles模型使用ceisum官网示例中的模型,加载3dtiles功能目前只能添加没有压缩的模型,draco或其他解压缩功能没有写。

1、在上一个例子的基础上,将鼠标事件改成右键的鼠标事件Cesium::ScreenSpaceEventType::RIGHT_CLICK

_eventHandler->setInputAction(&Handler::mouseUp, Cesium::ScreenSpaceEventType::RIGHT_CLICK);//设置鼠标点击事件

2、将ceisum的viewer赋值给hanlder指针的成员变量,并在Handler类中定义成员变量

handler->viewer = &viewer;
Cesium::Cesium3DTileset *tileset = NULL;

3、改写mouseUp函数,mouseUp函数有两个参数,在鼠标点击时回返。第一个参数是在创建new Cesium::ScreenSpaceEventHandler时传入的Handler变量,第二个参数是鼠标点击时的屏幕位置。在函数中创建Cesium3DTileset并加载到地图中,然后定位到模型。

std::string url="../data/BatchedColors/tileset.json";
aggregator->tileset = new Cesium::Cesium3DTileset(url);
//viewer.zoomTo(tileset);
aggregator->viewer->_scene->primitives()->add(aggregator->tileset);
Cesium::HeadingPitchRoll *orientation = new Cesium::HeadingPitchRoll(0.0, -1.5707963267948966, 0.0);
//因为已经有glm库使用没有写cesium的Cartesian3,但是Cartesian3的很多方法是写了的,也可以用glm库提供的
glm::dvec3 initialPosition1 = Cesium::Cartesian3::fromDegrees(-75.60908200128681, 40.04159868719826, 1000);
aggregator->viewer->_scene->_camera->setView(orientation,initialPosition1);

4、运行程序,鼠标在地图中点击右键即可加载模型并定位到模型

5、加载3dtileset模型并定位到模型,cesium,ccesium

完整代码文章来源地址https://www.toymoban.com/news/detail-539347.html

/**
 * Created by IBM on 2021/3/3.
 */
#include <iostream>
#include <Widgets/Viewer/Viewer.h>
#include <Scene/Cesium3DTileset.h>

class Handler {
public:
    Cesium::Viewer *viewer;
    Cesium::Cesium3DTileset *tileset = NULL;

    bool bol;
   /**
    * 鼠标右键加载tileset模型
    * @param handler
    * @param event 鼠标指针位置,屏幕坐标,与ceisum中的基本一致
    */
    static void mouseUp(void *handler, Cesium::ScreenEvent *event) {
        Handler *aggregator = (Handler *) handler;
        if (aggregator->tileset == NULL) {
            std::string url="../data/BatchedColors/tileset.json";
            aggregator->tileset = new Cesium::Cesium3DTileset(url);
            //viewer.zoomTo(tileset);
            aggregator->viewer->_scene->primitives()->add(aggregator->tileset);
            Cesium::HeadingPitchRoll *orientation = new Cesium::HeadingPitchRoll(0.0, -1.5707963267948966, 0.0);
            //因为已经有glm库使用没有写cesium的Cartesian3,但是Cartesian3的很多方法是写了的,也可以用glm库提供的
            glm::dvec3 initialPosition1 = Cesium::Cartesian3::fromDegrees(-75.60908200128681, 40.04159868719826, 1000);
            aggregator->viewer->_scene->_camera->setView(orientation,initialPosition1);
            // 或者
            //aggregator->viewer->zoomTo( aggregator->tileset);
        }
    }
};

int main(int argc, char *argv[]) {
    Handler *handler = new Handler();
    Cesium::Viewer viewer = Cesium::Viewer(500, 300);
    handler->viewer = &viewer;
    std::string url = "https://dev.virtualearth.net";
    std::string key = "AmXdbd8UeUJtaRSn7yVwyXgQlBBUqliLbHpgn2c76DfuHwAXfRrgS5qwfHU6Rhm8";
    Cesium::BingMapsImageryProvider *imageryProvider1 = new Cesium::BingMapsImageryProvider(url, key);
    viewer.imageryLayers()->addImageryProvider(imageryProvider1);
    //创建事件
    Cesium::ScreenSpaceEventHandler *_eventHandler = new Cesium::ScreenSpaceEventHandler(handler);
    _eventHandler->setInputAction(&Handler::mouseUp, Cesium::ScreenSpaceEventType::RIGHT_CLICK);//设置鼠标点击事件
    viewer.startAnimating(true);//启动opengl循环
    system("pause");
    return 0;
}
​​​​​​返回目录 

到了这里,关于5、加载3dtileset模型并定位到模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • CesiumForUnreal实现多边形裁剪3dTileset效果

    基于CesiumForUnreal插件的 Cartographic Polygon Actor在 Runtime 运行时环境下实现对地形3DTileset的多边形裁剪效果,GIF动图如下: 在Editor中的具体操作过程可以参考CesiumForUnreal官方裁剪地形的教程,本文这里在Runtime环境下进行实现。数据依旧是使用CesiumForUnreal插件加载在线的地形和影

    2024年02月13日
    浏览(21)
  • CesiumForUnreal之3DTileset点选拾取属性与单体高亮

    在UE5中使用CesiumForUnreal插件加载本地的3dTiles建筑白模数据,实现点击拾取3DTileset单体要素的 属性数据 ,并对 高亮单体 进行展示,GIF动图如下: 总体的实现过程分为 数据准备 、 属性拾取 和 单体高亮 三个大的部分,在本文中数据准备部分简要概述,拾取属性和单体高亮会

    2024年02月04日
    浏览(23)
  • 【Cesium学习(六)】Cesium加载3D模型(3D tiles和glTF模型)

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

    2024年02月07日
    浏览(38)
  • Cesium3Dtilesets 使用customShader的解读以及泛光效果示例

    前言:光带原理在旋转弹跳四棱锥这篇文章里早已经阐述过,但还是有不少靓仔靓女可能会感到疑惑,在3Dtilesets里怎么使用?为啥我在网上看到的为数不多的代码示例我看不懂?是由于没理解透彻导致的。借此机会,提供一个小示例,从头到尾的应用一下。 效果 加载Cesium

    2024年01月20日
    浏览(28)
  • cesium加载三维模型3dtiles

    目的:为避免跨域 输入cmd命令 python3 -m http.server 5500 http://127.0.0.1:5500/data/mars3d-max-shihua-3dtiles-master/tileset.json http://127.0.0.1:5500/cesium/cesium%E5%8A%A0%E8%BD%BD3dtile2.html

    2024年02月13日
    浏览(32)
  • cesium加载glb格式的3d模型

    官方示例: Cesium Sandcastle https://sandcastle.cesium.com/?src=3D%20Models.htmllabel=Tutorials glb模型下载:https://sandcastle.cesium.com/SampleData/models/CesiumAir/Cesium_Air.glb   

    2024年02月11日
    浏览(27)
  • Cesium地图上加载3DTiles模型

    1,使用Blender创建模型: 官网下载Blender:https://www.blender.org/,在Github上下载Building Tools插件,通过编辑-偏好设置-插件-安装,导入压缩包使用,这个可以自己创建小房子,文件-导出为obj格式 2,将.obj转成3dtiles格式: 1,第一种方法通过加载本地文件展示: 1,github下载ObjTo3

    2024年02月03日
    浏览(29)
  • vue结合Cesium加载gltf模型

    Cesium支持什么格式?         Cesium支持的格式包括:3D模型格式(如COLLADA、gITF、OBJ)、影像格式(如JPEG、PNG、GeoTIFF)、地形格式(如STL、Heightmap)、矢量数据格式(如GeoJSON、KMZ)、时间动态数据格式(如CZML),以及其他各种数据格式。此外,Cesium还通过插件支持其他特

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

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

    2024年04月17日
    浏览(31)
  • Cesium加载3Dtiles模型-大疆智图

    Cesium加载3Dtiles模型步骤: (一)如果您使用的是大疆智图,则该软件可以直接输出3Dtiles格式(B3DM切片)的数据,如图所示:   (二)如果您使用的是CC(Smart3D),该软件可以输出OSGB格式的数据,我们可以借助: 1.osg2cesiumApp v1.3软件来将我们的OSGB倾斜摄影数据转换成3Dtil

    2024年02月11日
    浏览(26)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包