如果想完成基于Cesium的WebGL平面图形绘制工作,在调整效果的时候,反复调整配置项属性值,是很低效的。这需要开发者具备图形学基础,可以学一些WebGL理论知识,逐步就能够理解3D图形开发。
随着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图像,听起来是非常高兴的一件事,但是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技术做项目的开发者,只要学会JavaScript代码即可上手。

商业追求效率是必然的,能够起到商业化作用的技术,无疑要非常简单好用,能够方便推广,为大众所接受才行。ThingJS也是在WebGL技术的基础上逐步发展起来的,为了商业项目的开发而不断更新迭代,更多新功能欢迎登陆免费使用。

ThingJS 和Threejs在3D开发框架性能上,谁更优秀?相关推荐

  1. 如何使用Tenderly在Moonbeam上构建更优秀的Dapp

    Tenderly完成第一阶段与Moonbeam的集成,启动了许多必要的开发工具.了解Tenderly如何帮助你在Moonbeam上构建更优秀的Dapp,以及这两个项目如何致力于为用户和开发者提供统一体 ...

  2. SkyWalking配上告警更优秀

    前言 对于监控系统来说,不可能让人一直盯着监控看板,而更多的是以自动提醒的方式,比如邮件.短信或微信推送等,当达到或超出预设的告警指标时,就自动发送消息提醒,下面就来说说如何配置SkyWalking的 ...

  3. 基于ThreeJS实现3D模型上的室内灯光效果模拟

    基于ThreeJS实现3D模型上的室内灯光效果模拟 示例描述与操作指南 示例效果展示 实现步骤 示例描述与操作指南 当前示例用于展示室内灯光的多角度光影效果. 示例效果展示 实现步骤 第一步 创建聚光 ...

  4. threejs生成3d地图所需

    threejs生成3d地图所需 1.threejs,郭龙邦弄的教程 熟悉形状.线绘制,绘制白模楼宇 熟悉sprite,用以做POI标注 熟悉光照 熟悉LOD,用以远近不同时加载不同物体.地面 熟悉漫游 ...

  5. 有关echarts、thingJS和threeJS

    之前为了做一个地图和一个3D的房屋, 看了一下echarts和thingJS,threeJS.了解的不太多,现在把自己所稍微了解到的东西记录下来 echarts.thingJS.threeJS是什么 ...

  6. mpvue 微信小程序api_第三方框架与原生微信小程序开发框架性能之比较 | Q荐读...

    作者 | 崔红保编辑 | 王莹 自 2017年1月9日微信小程序诞生以来,历经 2 年多的迭代升级,已有数百万小程序上线,成为继 Web.iOS.Android 之后,第四大主流开发技术. 与之相随, ...

  7. 使用threejs 实现3D物体展示,平移实现类似百度地图功能

    为了实现类似百度地图功能 使用threejs 实现3D物体,通过鼠标平移,缩放,键盘箭头按钮左右移动的功能展示. <!DOCTYPE html> <html> <head ...

  8. 如何更快地渲染?深入了解3D渲染性能的指南!(5)

    上文<如何更快地渲染?深入了解3D渲染性能的指南!(4)>我们介绍了从场景内部灯光.用料.反射.材质等方面的优化,提升场景渲染的速度.本文Renderbus云渲染农场将继续从渲染设置.全局 ...

  9. 利用threejs实现3D全景图

    threejs下载位置:http://www.threejs.org 我在Facebook上看到Facebook实现了3D全景图,然后,一直很好奇,最后,我发现threejs里面有一个库竟然可以实现, ...

  10. threejs创建3d交互地图

    文章目录 前言 关键点 源码 总结 前言 基于react-hooks创建的三维地图,只实现了基本的交互展示,可根据个人喜好增加各种交互和展示效果,效果如下. 关键点 使用threejs创建3d地图注意 ...

最新文章

  1. 打开快手,体验流畅的单目三维手势技术
  2. hadoop写文件 java_写文件 - Hadoop 学习手册_教程_Java开发社区
  3. ASP.NET中如何实现负载均衡
  4. c语言产生cl.exe错误,vc++6.0执行cl.exe时出错
  5. Libra教程之:move语言的特点和例子
  6. [转]ES7、ES8、ES9、ES10新特性大盘点
  7. CentOS网络配置与重启方法
  8. ## CSP 201412-2 Z字形扫描(C语言)(100分)
  9. ios Class类型使用
  10. WITH (NOLOCK)提高查询效率
  11. EnableQ在线问卷调查引擎概览
  12. 神经网络入门之CNN(二)
  13. 鸿鹄系统和鸿蒙系统电脑,荣耀智慧屏发布:首发鸿鹄818处理器及鸿蒙系统,定价3799元起...
  14. 【优化调度】基于matlab遗传算法求解孤岛型微电网(成本最低) 调度优化问题【含Matlab源码 1163期】
  15. 黑马程序员——OC学习笔记—— Copy
  16. FusionCharts 技术文档-drilldown map
  17. 倒计时3天!云栖大会龙蜥操作系统峰会最新议程一览
  18. FLASH编程与改变程序(代码)存储地址的问题
  19. 引入第三方sdk错误提示
  20. python爬取网易云音乐生成王力宏歌曲词云

热门文章

  1. JAVA实现时间换算
  2. 基于node+mysql的微信商城小程序全栈系统(vue后台管理系统+微信小程序+node服务端)
  3. 如何选择深度学习的GPU
  4. 留在一线,逃离一线?我从上海举家回成都的生活经历告诉你
  5. 网易交互设计师微专业 目录
  6. Tomcat配置SSL证书实现https(内网ip访问)
  7. U盘启动盘制作,金士顿2GU盘量产工…
  8. 西安电子科技大学计算机科学与技术拔尖班,西安电子科技大学入选基础学科拔尖学生培养计划2.0基地...
  9. wifi信号满格无法连接服务器,wifi正常为什么不能上网_一招解决wifi信号满格不能上网的方法...
  10. Golang使用 阿里云OSS存储