TWaver版3D化学元素周期表
非常早就有人做3D网页版的化学元素周期表了。酷炫效果和新奇技巧一度被众多粉丝奉为神明,争相研究和效仿。甚至有人放弃一切扑向这颗蜡烛。不由总是想到那个OPPO广告女主角拽拽的歧视道:“辞职去旅游。你敢吗?”
俺不敢,只是用TWaver做一个也没用几个小时。所以就老在想:不就旅个游么,至于嘛?

这个3D元素周期表做了一些改进:卡片上添加了汉字及拼音读音。原因你懂得——各位程序员没几个敢大声读这些汉字的。
还好每一个字的主要部分还大都认识,多少能够小声蒙一下。加上拼音就少了很多尴尬。另外在形状布局和特效上也丰富了一点,详细能够看下方视频连接。
技术上来说,用TWaver 3D来做的思路略有不同。最開始网上这个程序是使用HTML5、CSS3、WebGL、THREE.js、TWEEN.js等技术做的。
使用TWaver就不用这么麻烦了。直接一个mono.js就差点儿相同搞定了。技术上依然是WebGL+js,但没有使用CSS3和其它框架。
效果和效率都非常好。
实现上难度不大,大概思路例如以下:
- 用数组定义好化学元素周期表的数据。包含编号、汉字、拼音、数值、英文等等。然后在内存中动态生成每一个元素相应的图片卡。并转成base64格式的内存url字符串。
注意图片的格式、透明度、颜色等细节。
- 为每一个化学元素new一个3D立方体,并把内存图片贴图到立方体正面。立方体的厚度0即可了,其它面都透明即可;
- 监听鼠标事件。当鼠标over每一个物体时。让立方体发光。点击物体时。让立方体动画反转一圈。
- 计算好几个形状布局相应的空间坐标,并事先记录到每一个立方体的client属性表中。
比如:node.setClient(‘grid’,{x:100,y:340});
- 放几个button。每一个button点击后,让全部的立方体到相应的形状的位置上去,同一时候启用动画机制;
实际代码中,也要留意一些注意事项:
- 动画:当第一次动画尚未运行完成,用户又点击其它button运行新动画时。须要先推断当前有无正在运行的动画,并及时让动画停止。同一时候还要推断是否须要把数值恢复成初始值或动画正常结束所设定的值。这里如不细致处理,可能会导致动画将卡片的位置、角度错乱。
- 布局:球形、螺旋、随机等空间点事实上都非常好计算。尤其球形布局,開始大家可能会去寻找“在一个半径为r的球形表面均匀散布n个点,求每一个点的坐标?”这种题目。
这样就把问题复杂化了。由于简单的视觉布局并不须要特别严谨的位置数值,所以大致把球进行径向和横向切片进行数值插入即可;
- 贴图:最開始。我们可能会认为程序是使用了100张小图片进行贴图。
但实际上,由于每一个卡片的差别不过文字。所以全然能够在内存动态生成。这样速度快节省了网络下载图片的时间以及维护图片的麻烦。同一时候文字和图片等样式也更easy控制。这也都是HTML5的canvas技术为大家带来的优点。
- 物体朝向:在布局过程中。每一个卡片的旋转和朝向是一个要考虑的问题。
比如球形。每一个卡片要面向球形圆心发射线的外方向,螺旋形卡片则朝向水平外方向,等等。计算这些坐标和角度须要非常多数学运算,光是求坐标系和直角坐标系转换之类的就够大家忙活一阵子了。
而用TWaver就简单了:每一个物体直接lookAt一个点即可了。比如球形卡片。每帧动画只要运行:node.lookAt(0,0,0)即可了,对吗?还不全然对。这样lookAt到中心点,不就“屁股”朝外了吗?用户看到的字是卡片的背面,是反的。
要解决也简单,应当让它lookAt自己坐标两倍的地方,也就是圆心放射线的外面:node.lookAt(x*2,
y*2, z*2)。这样就对了。 - 发光。鼠标over每一个物体,都会看到发光。
而鼠标over在光晕位置,却不会触发over事件。这是怎么做到的呢?事实上也是小技俩,大家能够看看程序,自己研究吧。
生成内存图片代码片段:
1 |
var"image/png"); |
2 |
node.setStyle('front.m.texture.image',url); |
球形布局坐标计算代码片段:
1 |
var1000; |
2 |
var1 +2 * |
3 |
var |
4 |
var |
5 |
var |
6 |
var |
程序和源码都已经在TWaver的MONO DESIGN产品中。感兴趣的朋友能够登录在线网址www.mono-design.cn或下载产品包。赶紧试试吧!







TWaver版3D化学元素周期表的更多相关文章
- 10个TWaver 网页3D可视化精彩案例
以下网页3D案例均为TWaver原创出品,推荐使用Chrome, FireFox, Safari等对WebGL支持良好的浏览器运行.案例排名不分先后,如需Demo,可直接申请试用. 1. 化学元素 ...
- 使用webgl(three.js)搭建3D智慧园区、3D大屏,3D楼宇,智慧灯杆三维展示,3D灯杆,web版3D,bim管理系统——第六课
前言: 今年是建国70周年,爱国热情异常的高涨,为自己身在如此安全.蓬勃发展的国家深感自豪. 我们公司楼下为庆祝国庆,拉了这样的标语,每个人做好一件事,就组成了我们强大的祖国. 看到这句话,深有感触, ...
- 化学元素周期表的英文全称 Periodic Table of the Elements
化学元素周期表的英文全称 Periodic Table of the Elements 缩写 PTE 拉丁文 英文 1 H 氢 Hydrogenium Hydrogen 2 He 氦 Helium ...
- 使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课
序:这段时间忙于奔波,好久没有更新了,今天更新一下,继续上节课的完善讲解,算是对前段时间的一个总结吧.披星戴月的时光也算有点应用效果了. 对于webgl(three.js)性能这一块我在上节课< ...
- TWaver 3D作品Viewer查看器
为了让开发者更方便的对各类3D模型.设备.物体进行浏览和查看,我们直接封装了mono.Viewer组件.它可以直接根据给定的数据源(json.obj.url等)进行数据加载和浏览展示.对于一般的3D设 ...
- TWaver 3D应用于大型数据中心(续)
在2014年11月份,我们当时发了一篇有关TWaver HTML5 3D应用于大型数据中心的文章,该blog比较详细的描述一些常用的功能的实现方法,比如:动态添加机柜,告警,温度,湿度等相关的功能的具 ...
- 22万个木箱!TWaver 3D极限压榨
打开个门户网站都千呼万唤,我们还能期待网页上的3D技术会有“酣畅淋漓”.“一气呵成”的感受吗?也许现在还差点火候.但是HTML5.WebGL等技术一直在飞速的发展,可能很快你就会惊讶它的能力.现在,我 ...
- VR技术在数据中心3D机房中的应用 (下)
VR技术在数据中心3D机房中的应用 (下) 前面给大家简单科普了一下VR的硬件设备以及VR在各个领域的应用,是不是觉得非常高大上?千言万语概括成一句话,VR能给用户带来前所未有的沉浸感和交互方式,让人 ...
- 使用three.js创建3D机房模型-分享一
序:前段时间公司一次研讨会上,一市场部同事展现了同行业其他公司的3D机房,我司领导觉得这个可以研究研究,为了节约成本,我们在网上大量检索,最后找到一位前辈的博文[TWaver的技术博客],在那篇博文的 ...
随机推荐
- hdu 1561 树形dp+分组背包
题意:就是给定n个点,每个地点有value[i]的宝物,而且有的宝物必须是另一个宝物取了才能取,问取m个点可以获得的最多宝物价值. 一个子节点就可以返回m个状态,每个状态表示容量为j(j<=m) ...
- hdu 3081
二分答案,网络流是否满流判断合法性. #include <cstdio> #include <cstring> #include <queue> #include ...
- 去除两端margin的方法
假如有一份视觉稿,其中一部分是实现这样的: 两排横向排列的框,它们中间有边距,两端无边距.每个框大小为100*100,外边距为20,整个区域为460*220. HTML结构: <div> ...
- PHP自动加载下——PSR4
1.先来介绍一下PSR规范 PHP-FIG,它的网站是:www.php-fig.org.就是这个联盟组织发明和创造了PSR规范,其中自动加载涉及其中两个规范,一个是PSR0,一个是PSR4, PSR0 ...
- Visual Studio删除所有的注释和空行
visual studio用"查找替换"来删掉源代码中所有//方式的纯注释和空行 注意:包括/// <summary>这样的XML注释也都删掉了. 步骤1/2(删除注释 ...
- @JsonInclude(Include.NON_NULL)
前端的同事要求说尽量不要有null,可有为空串“” 或者 0 或者 [], 但尽量不要null. 所以@JsonInclude(Include.NON_NULL) 这个注解放在类头上就可以解决. 实体 ...
- Java Simon--性能瓶颈分析工具
有了AOP以及Javainstrument之后,Java有很多很好的性能监控工具可以很有效的帮助我们分析系统瓶颈.例如使用jvisualvm的gui连接JVM应用之后可以监控应用的各种状态,可以看到每 ...
- oc 第五天(内存管理)
OC的重点: 内存管理 1 基本原理 OC的内存回收机制是和JAVA的自动回收机制是不同的,它有两种模式,或者准确的说是同 一种模式的两种不同体现,下面简单总结下. 1手动内存回收 ...
- ECharts学习总结(三):ECharts图表对象的初始化(init)详解以及注意事项
一.相关js文件的引入 这里我们采用标签式引入文件的方式,我们引入两个js文件,一个是esl.js文件和一个echarts.js. <script src="js/esl.js&quo ...
- jquery判断滚动条是否到底部
clientHeight:这个元素的高度,占用整个空间的高度,所以,如果一个div有滚动条,那个这个高度则是不包括滚动条没显示出来的下面部分的内容.而只是单纯的DIV的高度. offsetHeight ...