WebGL的3D框架比较 ThingJS 和 Three.js

摘要:
下面就基于WebGL技术探讨一下现在的两款3D框架。Threejs目前最流行的开源3D框架,2009年4月诞生,2005年adobe收购了macromedia的flash产品,2008,2009年正是flash如日中天之时,threejs也识时务的选择了flash的ActionScript平台,后来flash没落之后选择了WebGL。ThingJS新兴的3D框架,2018年诞生,是针对物联网领域的JavaScript3DLibrary。这时就需要ThingJS了。ThingJS是更为上层的抽象,不用关心,渲染,mesh,光线等复杂概念。我们再来看下ThingJS的模型加载。

随着flash的没落,浏览器的原生能力的兴起。在3D方面WebGL不管从功能还是性能方面都在逐渐加强。2D应用变为3D应用的需求也越来越强烈。 win10的画图板支持3D图片,2d工具photoshop也开始逐步集成了3D工具。

下面就基于WebGL技术探讨一下现在的两款3D框架。
Threejs(http://threejs.org/)

目前最流行的开源3D框架,2009年4月诞生,2005年adobe收购了macromedia的flash产品,2008,2009年正是flash如日中天之时,threejs也识时务的选择了flash的ActionScript平台,后来flash没落之后选择了WebGL。

ThingJS(http://thingjs.com/)
新兴的3D框架,2018年诞生,是针对物联网领域的JavaScript 3D Library。它是由在3D领域经营多年的优锘科技公司研发,旨在简化3D应用开发。

WebGL的3D框架比较 ThingJS 和 Three.js第1张

设计角度
WebGL可以处理3D图像,听起来是非常高兴的一件事,但是WebGL实在是太底层了,WebGl解决是如何再画布上画图的问题,怎么画点,线,面,怎么上色,怎么贴图,怎么处理光线,视角转动之后怎么换算绘制等等。这些对于一个做3D应用的开发者来说要学的东西太多了。
Threejs库的出现解决了底层的渲染细节和复杂的数据结构,终于将复杂的底层细节抽象出来,使得大家开发3d应用更容易了一些。和很多开发者交流threejs都是他们首次接触的WebGL 3D库,并能很容易的就能开始做一些实验。
但是使用Threejs开发应用还是门槛很高,但就一个加载模型,调光,选择模型弹框的功能,就能干出Threejs上百行代码。同时还有很多复杂的3D概念需要理解。
这时就需要ThingJS了。

ThingJS是更为上层的抽象,不用关心,渲染,mesh,光线等复杂概念。它抽象是一个个具体的模型,ThingJS封装了对模型交互事件的各种api,比如单击,左键,鼠标滑过等,ThingJS封装了对模型的操作,例如移动,放大缩小,上色,勾边,甚至开门,ThingJS还封装了模型的层次关系,例如物体是放在某个房间里的,房间又在某个楼层,楼层又是某个大楼的。大楼在园区里。

编码对比

这里仅仅从3D模型加载这个小点进行对比说明。更多内容大家可参考各自的网站www.three.org 和 www.thingjs.com进行详细对比。

three的模型加载

function load3DModel(){
   /
     1、collada是一种基于XML的3D模型交互方案,简单来说,就是一种3D模型可以通过collada转换成另一种3D模型,
     从而,各种3D模型都可以通过collada转换成web支持的3D模型。
     2、。dae是一个钟3D模型的格式
     3、加载时注意浏览器同源策略的限制
    /
   var loader = new THREE.ColladaLoader();
   loader.load( "./model/avatar.dae", function ( collada ) {
      //找到模型中需要的对象。将相机看向这个对象是为了让这个对象显示在屏幕中心
      collada.scene.traverse( function ( child ) {
         if ( child instanceof THREE.SkinnedMesh ) {
            modelObj = child;
            camera.lookAt( child.position );
         }
      } );
      //将模型的场景加入到整体的场景
       modelObj.material.opacity = 0.8;
      scene.add( collada.scene ); //每个模型都要添加到场景
 
      //显示出模型的骨骼的代码,不需要可删去
      var helper = new THREE.SkeletonHelper( modelObj );
      helper.material.linewidth = 3;
      scene.add( helper );
   } );
}

threejs 加载模型到场景每个细节都得自己处理。

我们再来看下ThingJS的模型加载。

var app = new THING.App({
    container: 'div3d',
    url: 'https://speech.uinnova.com/static/models/building'
});

只关注场景再页面的div的id和场景存放的地址,所有的细节ThingJS都处理好了。

场景加载完之后便可从场景获得加载内容,并进行交互应用开发。

    // 获取建筑对象
    var building = app.buildings[0];    
    // 打印建筑中所有的楼层
    building.floors.forEach(function(floor) {
        console.log('Floor: ' + floor.id);
    });    
    // 获取室外对象
    var outdoors = app.outdoors;        
    // 打印室外所有物体
    outdoors.things.forEach(function(thing) {
        console.log('Thing: ' + thing.id);
    });

多么完美的封装方式。更多细节可以到www.thingjs.com查看

总结

three.js(www.three.org)和ThingJS(www.thingjs.com)都是JavaScript 3D Library,都对webGL的3D处理能力进行了封装,但是three.js 更偏三维技术底层,适用于3D爱好者学习3D技术;ThingJS更偏物联网应用功能开发,重在开发效率,降低开发成本,适合于使用3D技术做项目的开发者。

全文地址请点击:https://blog.csdn.net/liuwei000000/article/details/80623532?utm_source=copy

免责声明:文章转载自《WebGL的3D框架比较 ThingJS 和 Three.js》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jenkins关闭和重启最全Pycharm教程(29)——再探IDE,速成手冊下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

首个threejs项目-前端填坑指南

第一次使用threejs到实际项目中,开始的时候心情有点小激动,毕竟是第一次嘛,然而做着做着就感受到这玩意水好深,满满的都是坑,填都填不过来。经过老板20天惨无人道的摧残,终于小有成就。 因为第一次搞这玩意,相对的遇到的问题也是大把的,让我来一一诉说一路上遇到的各种问题。 开发使用: C4D、Blender2.75、[threejs-r72](http:...

iOS 14 egret H5游戏卡顿问题分析和部分解决办法

    现象 总体而言,iOS 14 渲染性能变差,可以从以下几个测试看出。 测试1:简单demo,使用egret引擎显示3000个图(都是同一个100*100 png 纹理),逐帧做旋转。(博客园视频播放可能有问题,视频地址:https://github.com/kenkozheng/kenkozheng.github.com/blob/master...

图像检索(image retrieval)- 10

Data, networks, and code: cmp.felk.cvut.cz/cnnimageretrieval https://github.com/filipradenovic/cnnimageretrieval-pytorch Fine-tuning CNN Image Retrieval with No Human Annotation...

3D数据采集和重建

3D数据采集和重建是从传感器数据生成三维或时空模型。一般而言,这些技术和理论适用于大多数或所有传感器类型,包括光学,声学,激光扫描,[1]雷达,热学,[2]地震。[3] [4] 内容 ·        1收购 1.1从2D图像中获取 1.2从获得的传感器数据中获取 1.3从现场传感器获取 1.4软件 1.5成本 2对象重建 2.1软件 3另见 4参...

发布WebGL的过程

  今天测试了一下发布 WebGL 的过程, 通过 Unity3D 创建, 相当麻烦, 它不仅对API有限制, 对测试Debug有限制, 也对服务器有要求, 并且现在的浏览器都很注重安全策略, 这些都增加了复杂度...   流程大概如下:   1. 做个简单场景, 放到 BuildSettings 里面去   2. 如果有代码, 检查是不是有不能使用的AP...

【BIM】BIMFACE中创建矢量文本[上篇]

背景 在三维模型产品的设计中,针对空间的管理存在这样一个普遍的需求,那就是在三维模型中,将模型所代表的空间通过附加文本的方式来展示其所代表的实际位置或功能,之前尝试过若干方式,比如直接在建模的时候,将文本以构件的方式建在模型里,其优点是展示效果好、位置可控、放大后不失真,但是缺少灵活性,一旦加入到模型中,相当于焊死在上面;另一种方式则是通过Canvas绘制...