基于 HTML5 WebGL 的高炉炼铁厂可视化系统

2021-03-07 12:27

阅读:393

// 默认设置的眼睛视角数组
const ROAM_EYES = [
    [1683.6555274005063, 939.9999999999993, 742.6554147474625],
    [1717.1004359371925, 512.9256996098727, -1223.5575465999652],
    [-181.41773461002046, 245.58303266170844, -2043.6755074222654],
    [-1695.7113902533574, 790.0214102589537, -877.645744191523],
    [-1848.1700283399357, 1105.522705042774, 1054.1519814237804],
    [-108, 940, 1837]
];
// 开启相机移动漫游动画
playRoam() {
    // 设置场景眼睛视角
    let eye = ROAM_EYES[this.roamIndex];
    // 开启相机视角移动动画 moveCamera
    this._roamAnim = this.view.moveCamera(eye, [0, 0, 0], {
        duration: this.roamIndex ? 3000 : 4000,
        easing: Easing.easeOut,
        finishFunc: () => {
            this.roamIndex ++;
            let nextEye = ROAM_EYES[this.roamIndex];
            // 判断是否有下一组眼睛视角,有的话继续执行相机视角移动动画,反之则重置漫游动画
            if (nextEye) {
                this.playRoam();
            }
            else {
                // 事件派发执行显示面板动画
                event.fire(EVENT_SHOW_PANEL);
                this.resetRoam();
            }
        }
    });
}

 

      如果说场景视角漫游是一种大局整体观的体现,那么铁水罐车装载与运输以及传送带的运送则是一个高炉炼铁流程的拼图。通过一系列动画流程的表达,你会很清晰地发现,特定的 3D 场景下的讲解说明具有完整的故事串联性。

      以下是铁水罐车装载与运输的动画流程:

技术图片

      在 3D 场景中是用 x, y, z 来分别表示三个轴,通过不断修改节点的 3D 坐标就可以实现位移效果 car.setPosition3d(x, y, z),而对于铁水罐车上的装载标签则使用吸附的功能,使其吸附在铁水罐车上就能跟着一起行驶移动,然后在指定的空间坐标位置上通过 car.s(‘3d.visible‘, true | false) 来控制铁水罐车的出现与隐藏的效果。

技术图片

 

      而关于传送带上煤块、铁矿的传输和管道气体流通的指示,通过使用 UV 纹理贴图的偏移来实现会方便很多,先来看看效果上的呈现:

技术图片  技术图片

      对于三维模型,有两个重要的坐标系统,就是顶点的位置坐标(X、Y、Z)以及 UV 坐标。形象地说,UV 就是贴图影射到模型表面的依据,U 和 V 分别是图片在显示器水平、垂直方向上的坐标,取值一般都是0~1。而传送带以及管道的指示就是用这种方法实现的,HT 的模型节点自带 uv 值的样式属性,我们只需要不断地控制其偏移变化,就能实现传输的效果:

// 设置初始偏移值
let offset1 = 0, trackOffset = 0;
// 一直调用设置偏移值
setInterval(() => {
    flows.each(node => {
        node.s({
            ‘top.uv.offset‘: [-offset1, 0],
            ‘front.uv.offset‘: [-offset1, 0],
        });
    });
    track.s(‘shape3d.uv.offset‘, [0, -trackOffset]);
    // 偏移值增加
    offset1 += 0.1;
    trackOffset += 0.03;
}, 100);

 


评论


亲,登录后才可以留言!