乐趣区

关于javascript:从零开始学习3D可视化之场景层级2

1、动态创建组合场景
2、加载后的楼层和修建对齐
3、预知未知加载场景的物体构造
对于一些大型的 3D 可视化 场景,应用 CampusBuilder 间接制作会比拟艰难,间接加载也存在性能、加载工夫等问题。
解决这个问题首先在 CampusBuilder 中能够分成多个工程进行搭建,比方园区和所有修建的外立面应用一个独立的工程进行搭建,每栋修建的室内别离应用其余独立工程进行搭建。然而在搭建过程中须要留神每个工程里的物体命名必须保障惟一。

1、动态创建组合场景

例如,我按如下步骤来搭建 3D 可视化园区并开发利用。
1、搭建一个 3D 可视化园区,园区内有一个修建,我会分成两个工程进行搭建,别离是“XX 工业园区”、“XX 工业园区 - 办公楼室内”。
2、别离导出各个工程,并同步到 ThingJS 平台;
3、在 ThingJS 先加载 ”XX 工业园区 ”,该园区中蕴含修建,但该修建只有外立面。
4、应用事件,可从新注册进入修建的响应函数,事件回调内应用 app.create(),动静加载“XX 工业园区 - 办公楼室内”这个园区工程。
5、应用代码,获取“办公楼 TMP”这个 3D 可视化园区物体的修建,将其下的“办公楼楼层一”,“办公楼楼层二”,增加到原本只有外立面的“办公楼”对象身上。再将“XX 工业园区 - 办公楼室内”和“办公楼 TMP”这些长期对象删掉。

2、加载后的楼层和修建对齐

为保障前面加载的 3D 可视化楼层和之前加载修建对齐,能够这样做:
在 CampusBuilder 搭建 3D 可视化场景时,保障楼层绝对修建“办公楼”和“办公楼 TMP”的地位统一。
在 ThingJS 在线开发中,将“办公楼 TMP”下的楼层“挂接”到“办公楼”时,设置楼层的绝对坐标。

buildingTmp.floors.forEach(function (floor) {
buildingMain.add({
 object: floor,
 // 设置绝对坐标,楼层绝对于修建的地位保持一致
 localPosition: floor.localPosition
 });
})

3、预知未加载场景的物体构造

如果须要在未加载 3D 可视化场景的时候晓得一个物体在场景层级里的地位,以便于将视角切换过来,有两种办法:
1、能够通过 app.getCampusJSON 接口,在不加载园区场景的状况下,解析出该园区的场景树结构,做些相似下面动静加载场景的操作,在 3D 零碎中建设残缺的场景构造。再通过 EnterLevel 相干事件,配合下面主动动静加载的计划,就能够找到并切换到物体。
2、也能够自行建设后盾数据结构,后盾进行查问,告诉前台,前台应用 EnterLevel 相干事件,配合下面主动动静加载的计划,就能够找到并切换到物体。

仔细的敌人会发现,给每个物体都起一个名字是为了当前对性能做扩大,就相当于该物体在场景中有了惟一的标识,前面会很不便。到此,我就实现了动静加载一个残缺的 3D 可视化“办公楼”。残缺代码能够点击 ThingJS 官网示例查看。

退出移动版