`
xhload3d
  • 浏览: 208351 次
社区版块
存档分类
最新评论

基于HTML5 WebGL实现 json工控风机叶轮旋转

阅读更多

突然有个想法,如果能把一些用到不同的知识点放到同一个界面上,并且放到一个盒子里,这样我如果要看什么东西就可以很直接显示出来,而且这个盒子一定要能打开。我用HT实现了我的想法,代码一百多行,这么少的代码能实现这种效果我觉得还是牛的。

demo地址: http://www.hightopo.com/demo/Wall3D/index.html

先来看看效果图:


 

这个例子最基础的就是最外层的盒子了,所以我们先来看看如何实现它:

var box = new ht.CSGBox();
dataModel.add(box);

 用HT可以很轻易地实现这个盒子,在HT中封装了很多基础图元类型,我们经常用到的ht.Node也是其中一个,这样我们可以不用反复地写相同的代码来完成基础的实现。

 

这个例子中用的封装好的基础图元是ht.CSGBox,一个盒子模型,可以参考HT for Web 建模手册,我们在手册中可以看到,在CSGBox中我们只能操作这个盒子的各个面,如果你想要自己设置一些特殊的功能,只需要操作ht.Style(HT for Web 风格手册)即可。

我想你们都注意到了盒子上有模型化的水泵,上面有扇叶在旋转,那么这个水泵是怎么生成的呢?我用我们的2d编辑器写了一个水泵模型通过graphView.serialization(datamodel)将模型序列化成json格式的文件,然后在这边引用的时候我再调用graphView.deserialize(json)来将json文件导出成可视化的2d模型并设置animation动画,再立即刷新到这个水泵,否则就算设置了动画,水泵上的扇叶旋转也不会生效。

ht.Default.xhrLoad('displays/demo/pump.json', function(text){
    const json = ht.Default.parse(text);
    pumpDM.deserialize(json);
    var currentRotation = 0;
    var lastTime = new Date().getTime();

    setInterval(function(){
        var time = new Date().getTime();
        var deltaTime = time - lastTime;
        currentRotation += deltaTime * Math.PI / 180 * 0.3;
        lastTime = time;

        pumpDM.getDataByTag('fan1').setRotation(currentRotation);
        pumpDM.getDataByTag('fan2').setRotation(currentRotation);
        box.iv();
        // g3d.iv();这边也可以刷新g3d,但是局部刷新更省
        pumpGV.validateImpl();
    }, 10);
}, 10);

 这个时候我不能把水泵的graphView和g3d都加到底层div上,并且我的意图是把水泵的graphView加到g3d中的CSGBox中的一面上,所以为了让水泵显示出来 必须设置水泵所在的graphView的宽高,而这个宽高必须比我json画出来的图占的面积要大,不然显示不完整。如果想看这个宽高对显示的影响,可以自己改改看来玩玩。

pumpGV.getWidth = function() { return 600;}
pumpGV.getHeight = function(){ return 600;}
pumpGV.getCanvas().dynamic = true;//设置这个是为了让canvas能动态显示

 这边还要特别说明一个函数getDataByTag(tagName)这个函数是获取标识号,在HT中tag属性是唯一标识,虽然HT中也有id,但是id是HT中Data类型对象构造时内部自动被赋予的一个id属性,可以通过data.getId()和data.setId(id)获取和设置,Data对象添加到DataModel之后不允许修改id值,可以通过dataModel.getDataById(id)快速查找Data对象。

一般我们建议id属性由HT自动分配,用户业务意义的唯一标示可存在于tag属性上,通过data.setTag(tag)函数允许任意动态改变tag值,通过dataModel.getDataByTag(tag)可查找到对应的Data对象,并支持通过dataModel.removeDataByTag(tag)删除Data对象。

你可能会好奇在代码中我们并没有提到“fan1”这个tag标识,这个标识是在水泵的json中设置的,关于扇叶的一个标识,我们获取到扇叶,然后设置其旋转。

echarts图表的显示也是很基础的,但是我们会发现,在将echarts图表添加进graphView中它的动画效果会不显示,所以我们首先要将这个echarts图表所在的图表的dynamic设置为true,即将其设置为动态:

function charts(option){
    var info = {
        canvas: document.createElement('canvas')
    };
    info.canvas.dynamic = true;//设置info.canvas为动态
    info.chart = echarts.init(info.canvas);
    info.chart.setOption(option);
    return info.canvas;
}

最后,只需要将这两个回传的canvas传入ht.Default.setImage中即可:

ht.Default.setImage('echart', charts(option));
ht.Default.setImage('pump', pumpGV.getCanvas());

 ht.Default.drawImage函数生成新的图实际上就是在canvas上画图,所以我们只要把我们已经画好的canvas传到ht.Default.setImage就可以生成图片了。

  • 大小: 1.8 MB
3
1
分享到:
评论

相关推荐

    Unity能够在WebGL包使用的json解析.dll

    在Unity中,如果需要在WebGL平台上使用JSON解析功能,可能需要使用Unity内置的JsonUtility类,或者使用第三方的JSON库,如Newtonsoft.Json(又名Json.NET),因为System.Web.Extensions可能不直接适用于WebGL环境。...

    HTML5 WebGL实现酷炫的星云旋转背景动画特效源码.zip

    这个"HTML5 WebGL实现酷炫的星云旋转背景动画特效源码.zip"文件,显然是一个使用WebGL技术创建的3D星云旋转背景动画的示例。 WebGL基于OpenGL ES 2.0规范,它提供了一种JavaScript API,用于在任何兼容的Web浏览器...

    适用于Unity WebGL的JsonNet,普通的JsonNet是不能运行在webgl上的

    1. **Unity WebGL的限制**:Unity WebGL平台基于WebAssembly(WASM)运行,这是一个二进制格式,用于在浏览器中执行接近原生性能的代码。然而,它并不直接支持所有的.NET类库,尤其是那些依赖于本地操作系统功能的库...

    基于WebGL实现3D图片特效

    总的来说,"基于WebGL实现3D图片特效"是一个结合HTML5库和WebGL技术的创新应用,通过编程技巧将2D图像转化为互动式的3D视图,为用户带来生动的视觉体验。开发者通过理解并运用JavaScript、WebGL和相关的HTML5库,...

    HTML5 WebGL 3D 仓储管理系统

    HTML5 WebGL 3D 仓储管理系统是一种利用现代网络技术实现的高效、直观的库存管理解决方案。这个系统通过在网页上构建三维模型,为用户提供了更真实、更直观的仓库环境展示,使得库存物品的管理变得更加可视化和易于...

    基于 HTML5 WebGL 的 3D 仓储管理系统

    仓储系统!仓库管理可以说即不省力也不省事,而且使用范围还很广,数学中经常使用仓储系统来计算市场需求,物流中的动力学建模等等,所以仓储系统必不可少,在这个时间就是金钱的时代,能省时就能带来非常大的效益,...

    基于HTML5 WebGL 3D樱花飘落动画

    基于HTML5 WebGL 3D樱花飘落动画 1.网页作品简介 :HTML期末大学生网页设计作业 A+水平 ,喜欢的可以下载,文章页支持手机PC响应式布局。 2.网页作品编辑:作品下载后可使用任意HTML编辑软件(如:DW、HBuilder、...

    HTML5 WebGL酷炫3D旋转星云动画特效

    在这个"HTML5 WebGL酷炫3D旋转星云动画特效"项目中,我们将探讨如何利用JavaScript(JS)和CSS来实现这种视觉震撼的特效。 首先,让我们了解WebGL的基本概念。WebGL基于OpenGL ES 2.0规范,是一个JavaScript API,...

    基于HTML5原生WebGL实现的轻量级Google Earth三维地图引擎.zip

    "基于HTML5原生WebGL实现的轻量级Google Earth三维地图引擎"这个标题揭示了我们讨论的核心技术。HTML5是下一代网页标准,它在互联网上提供了更丰富的交互性和多媒体功能。而WebGL是HTML5的一个重要组成部分,它允许...

    基于HTML5 WebGl的VR DEMO ,(HTM5 WebGL Demo ).zip

    基于HTML5 WebGl的VR DEMO展示了如何利用WebGL技术创建沉浸式的虚拟现实环境。这个DEMO项目(WebGL-VR-master)可能包含了实现VR体验所需的各种文件,如HTML文件、JavaScript代码、CSS样式表以及可能的纹理图片和...

    Webgl实现的天气效果(下雨和下雪)

    Webgl实现的天气效果(下雨和下雪)

    基于HTML5的WebGL实现json和echarts图表展现在同一个界面

    在本文中,我们将探讨如何使用HTML5的WebGL技术结合ECharts和JSON数据在同一界面上展示图表。WebGL是一种JavaScript API,允许在浏览器中进行三维图形渲染,无需插件支持。ECharts则是一个基于JavaScript的数据可视...

    基于HTML5 WebGL的3D机房的示例

    用 WebGL 渲染的 3D 机房现在也不是什么新鲜事儿了,这篇文章的主要目的是说明一下,3D 机房中的 eye 和 center 的问题,刚好在项目中用上了,好生思考了一番,最终觉得这个例子最符合我的要求,就拿来作为记录。...

    HTML5 WEBGL 摇杆+按钮

    HTML5 WebGL 摇杆与按钮的实现是一个在现代网页应用中常见的技术组合,它允许用户在网页上进行交互式的3D操作。WebGL是一种基于OpenGL标准的JavaScript API,用于在任何兼容的浏览器中进行硬件加速的3D图形渲染。这...

    HTML5 WebGL水面水波荡漾特效 可多视角展示 超逼真

    "HTML5 WebGL水面水波荡漾特效"是一种利用WebGL技术实现的视觉效果,它可以模拟水面的波动和反射,使网页中的水体看起来极其逼真。这种特效通常涉及到复杂的数学计算,如向量运算、矩阵变换以及物理模拟,如波动方程...

    HTML5 WebGL实现超炫的迪厅霓虹灯闪烁动画特效源码.zip

    WebGL基于OpenGL ES 2.0,是一种JavaScript API,它与HTML5 Canvas元素结合,为网页提供了硬件加速的3D图形渲染能力。通过WebGL,开发者可以创建复杂的3D场景,包括灯光、纹理、几何形状和动画等,直接在用户的...

    使用webGL实现的全景图demo

    WebGL基于OpenGL ES 2.0标准,用于在HTML5的Canvas元素中进行交互式3D图形绘制。它允许开发者直接在浏览器中编写程序,构建复杂的3D场景。WebGL的核心在于顶点着色器和片段着色器,它们分别处理几何信息和颜色信息,...

    基于HTML5的WebGL技术电信3D机房漫游源代码

    【HTML5 WebGL技术详解】 HTML5是下一代网页标记语言,它的出现极大地扩展了网页的交互性和功能,其中WebGL(Web Graphics Library)是一项关键的技术,它使得浏览器可以直接在用户的设备上进行硬件加速的3D图形...

    HTML5 WebGL实现超逼真的天气预报网页雷雨动效源码.zip

    WebGL(Web Graphics Library)作为HTML5的一个重要组成部分,是基于OpenGL标准的JavaScript API,它允许开发者在浏览器环境中直接进行3D图形渲染,无需插件支持。这个"HTML5 WebGL实现超逼真的天气预报网页雷雨动效...

    HTML5 WebGL实现霓虹着色效果的超逼真星球旋转特效源码.zip

    这个"HTML5 WebGL实现霓虹着色效果的超逼真星球旋转特效源码.zip"文件,显然是一个使用WebGL技术实现的3D特效示例,特别强调了霓虹色彩和星球旋转的效果。 霓虹着色效果通常是通过复杂的着色算法来实现的,这种算法...

Global site tag (gtag.js) - Google Analytics