资讯专栏INFORMATION COLUMN

基于WebGL架构的3D可视化平台—平面图导航(一)

Labradors / 1061人阅读

摘要:接下来我们就用平面导航图来解决这一问题。第二部分我会给页加上鼠标悬停事件让页的标签和我们场景中的一起动起来完整代码加载场景代码场景地址场景相关面板相关平面图导航事件相关点击事件返回事件

前言

利用CampusBuilder来搭建自己的虚拟世界过程有这样一个问题:如何快速聚焦到虚拟场景的某一位置。当然我们可以创建几个按钮对应查找我们需要去的位置(参照物)并聚焦,但是按钮并不是很炫酷也不能很好的反馈给我们一些信息。接下来我们就用平面导航图来解决这一问题。

实现

第一步,使用CampusBuilder搭建模拟场景,CampusBuilder操作简单,分分钟就可以上手。这里为每一个房间都创建一个小球作为视点参照物体并勾选预览时隐藏,这样不会对我们的场景造成影响,也便于我们聚焦到指定房间。注意:要将我们每个房间中的设备框选之后组合在一起,为下一阶段的做准备。

第二步,把我们编辑好的场景加载到ThingJS中。

//加载场景代码
var app = new THING.App({
    // 场景地址
    "url": "http://www.thingjs.com/./uploads/wechat/S2Vyd2lu/scene/Campus04",
});
//场景相关
//************************************************************************************/
app.on("load", function () {
    app.camera.flyTo({
        "position": [36.357131498969785, 61.953024217074265, 69.12160670337104],
        "target": [-1.3316924326803257, -4.9370371421622625, 33.619521849828544],
        "time": 2000,
    });
});

第三步,为平面图创建一块面板,并调整一下面板的位置以及大小。
图片下载地址:
链接:https://pan.baidu.com/s/1gmNj... 提取码:i0c1

//面板相关
//************************************************************************************/
var panel = new THING.widget.Panel({
    closeIcon: false,
    dragable: false, 
    retractable: true,
    opacity: 0.9,
    hasTitle: true,
});
panel.width = 600;
panel.position = [0, 200];
var dataObj = {
    iframe: ""
};
var iframe = panel.addIframe(dataObj, "iframe").caption("").setHeight("290px");

第四步,编写iframe页。写完记得将这个页面和图片上传到页面资源,资源 => 页面资源 => 按钮(上传) 。




    
    
    
    Document
    


第五步,完成onClick()和initViewPoint()方法。

//事件相关
//************************************************************************************/
var currentModule = null;

//点击事件
function onClick(targetObj, viewPoint) {
    currentModule = app.query(targetObj)[0];
    currentModule.position = [0, 0, 0];
    currentModule.style.opacity = 1;
    app.camera.flyTo({
        "object": app.query(viewPoint)[0],
        "offset": [0, 13, 7],
        "time": 1000,
        complete: function () {
            currentModule.brothers.style.opacity = 0.3;
        }
    });
}
//返回事件
function initViewPoint() {
    currentModule.brothers.style.opacity = 1;
    currentModule = null;
    app.camera.flyTo({
        "position": [36.357131498969785, 61.953024217074265, 69.12160670337104],
        "target": [-1.3316924326803257, -4.9370371421622625, 33.619521849828544],
        "time": 1000,
    });
}

小结
第一部分我们主要完成了iframe与我们的3D场景的简单交互,这里也没有做什么特效只是做了一个点击事件。这里值得一提的是currentModule这个全局变量,开始我没有创建这个变量只是将我当前点击的物体obj.style.opacity = 1;obj.brothers.style.opacity = 0.3, 但是执行initViewPoint(){app.query(’.Thing’).style.opacity=1}无法将场景的opacity 属性还原(自己可以试一下,或者有解决方案留言)。第二部分我会给iframe页加上鼠标悬停事件让iframe页的img标签和我们场景中的obj一起动起来!

完整代码

    //加载场景代码
var app = new THING.App({
    // 场景地址
    "url": "http://www.thingjs.com/./uploads/wechat/S2Vyd2lu/scene/Campus04",
});
//场景相关
//************************************************************************************/
app.on("load", function () {
    app.camera.flyTo({
        "position": [36.357131498969785, 61.953024217074265, 69.12160670337104],
        "target": [-1.3316924326803257, -4.9370371421622625, 33.619521849828544],
        "time": 2000,
    });
});
//面板相关
//************************************************************************************/
var panel = new THING.widget.Panel({
    closeIcon: false,
    dragable: false, 
    retractable: true,
    opacity: 0.9,
    hasTitle: true,
});
panel.width = 600;
panel.position = [0, 200];
var dataObj = {
    iframe: "/uploads/wechat/S2Vyd2lu/file/平面图导航/ifram.html"
};
var iframe = panel.addIframe(dataObj, "iframe").caption("").setHeight("290px");

//事件相关
//************************************************************************************/
var currentModule = null;

//点击事件
function onClick(targetObj, viewPoint) {
    currentModule = app.query(targetObj)[0];
    currentModule.position = [0, 0, 0];
    currentModule.style.opacity = 1;
    app.camera.flyTo({
        "object": app.query(viewPoint)[0],
        "offset": [0, 13, 7],
        "time": 1000,
        complete: function () {
            currentModule.brothers.style.opacity = 0.3;
        }
    });
}
//返回事件
function initViewPoint() {
    currentModule.brothers.style.opacity = 1;
    currentModule = null;
    app.camera.flyTo({
        "position": [36.357131498969785, 61.953024217074265, 69.12160670337104],
        "target": [-1.3316924326803257, -4.9370371421622625, 33.619521849828544],
        "time": 1000,
    });
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100732.html

相关文章

  • 基于WebGL-ThingJS面图导航(二)

    摘要:前言基于架构的可视化平台平面图导航一中已经完成了面板与我们的场景的简单交互,下面我们继续完善并给页加上鼠标悬停事件让页的标签和我们场景中的一起动起来。 前言 基于WebGL架构的3D可视化平台—平面图导航(一)中已经完成了iframe面板与我们的3D场景的简单交互,下面我们继续完善并给iframe页加上鼠标悬停事件让iframe页的img标签和我们场景中的obj一起动起来。 实现 第一...

    noONE 评论0 收藏0
  • vue-threeJS数据驱动三维图形视化

    摘要:数据驱动的三维图形可视化在信息暴涨的年间,冷暴力的扁平化确实有效降低用户的信息焦虑感,使有限的精力更高效处理过多的信息流。 数据驱动的三维图形可视化 在信息暴涨的2010-2016年间,冷暴力的扁平化确实有效降低用户的信息焦虑感,使有限的精力更高效处理过多的信息流。二维平面化扁平化在苹果等大头引领下,成为大众用户机器交流默认的语言。然后,随着PC、平板、手机、智能家居等用户持有终端的性...

    SegmentFault 评论0 收藏0
  • 产品三维模型在线预览

    摘要:次时代传统的方式就是创建次时代模型,对应中的材质是高光网格材质对象,通常贴图文件包含颜色贴图法线贴图和高光贴图。 产品在线展示案例预览 玉镯在线预览:http://www.yanhuangxueyuan.co... 汽车在线预览:http://www.yanhuangxueyuan.co... Web3D技术历史 可通过插件或WebGL技术实现Web3D,在线网页上预览操作三维...

    DirtyMind 评论0 收藏0
  • 基于WebGL架构3D视化平台ThingJS—让粮仓“智慧”升级

    摘要:随着信息化技术发展,全国各地开始智慧粮仓的建设,我们可以通过一个视频看一下使用可视化平台做的可视应用,可视一体化,让粮仓智慧升级。构建粮仓内粮情的监控预警诊断分析一体化的可视化平台。 首先我们先了解一下基于WebGL架构的3D可视化平台——ThingJS是什么? ThingJS是优锘科技开发的一套面向物联网应用的在线3D可视化应用开发及运营PaaS平台,以 ThingJS云视PaaS服...

    aaron 评论0 收藏0

发表评论

0条评论

Labradors

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<