`

TWaver版3D化学元素周期表

阅读更多

很早就有人做3D网页版的化学元素周期表了,酷炫效果和新鲜技巧一度被众多粉丝奉为神明,争相研究和效仿。甚至有人放弃一切扑向这颗蜡烛,不由总是想到那个OPPO广告女主角拽拽的鄙视道:“辞职去旅游!你敢吗?”

俺不敢,不过用TWaver做一个也没用几个小时。所以就老在想:不就旅个游么,至于嘛?

这个3D元素周期表做了一些改进:卡片上增加了汉字及拼音读音,原因你懂得——各位程序猿没几个敢大声读这些汉字的。还好每个字的主要部分还大都认识,多少可以小声蒙一下,加上拼音就少了许多尴尬。另外在形状布局和特效上也丰富了一点,具体可以看下方视频连接。

技术上来说,用TWaver 3D来做的思路略有不同。最开始网上这个程序是使用HTML5、CSS3、WebGL、THREE.js、TWEEN.js等技术做的。使用TWaver就不用这么麻烦了,直接一个mono.js就差不多搞定了。技术上依旧是WebGL+js,但没有使用CSS3和其他框架。效果和效率都很好。

实现上难度不大,大概思路如下:

  1. 用数组定义好化学元素周期表的数据。包括编号、汉字、拼音、数值、英文等等。然后在内存中动态生成每个元素对应的图片卡,并转成base64格式的内存url字符串。注意图片的格式、透明度、颜色等细节;
  2. 为每个化学元素new一个3D立方体,并把内存图片贴图到立方体正面。立方体的厚度0就行了,其他面都透明即可;
  3. 监听鼠标事件。当鼠标over每个物体时,让立方体发光;点击物体时,让立方体动画反转一圈;
  4. 计算好几个形状布局对应的空间坐标,并事先记录到每个立方体的client属性表中。例如:node.setClient(‘grid’,{x:100,y:340});
  5. 放几个按钮,每个按钮点击后,让所有的立方体到对应的形状的位置上去,同时启用动画机制;

实际代码中,也要留意一些注意事项:

  1. 动画:当第一次动画尚未执行完毕,用户又点击其他按钮执行新动画时,需要先判断当前有无正在运行的动画,并及时让动画停止。同时还要判断是否需要把数值恢复成初始值或动画正常结束所设定的值。这里如不仔细处理,可能会导致动画将卡片的位置、角度错乱。
  2. 布局:球形、螺旋、随机等空间点其实都很好计算。尤其球形布局,开始大家可能会去寻找“在一个半径为r的球形表面均匀散布n个点,求每个点的坐标?”这样的题目。这样就把问题复杂化了。因为简单的视觉布局并不需要特别严谨的位置数值,所以大致把球进行径向和横向切片进行数值插入即可;
  3. 贴图:最开始,我们可能会觉得程序是使用了100张小图片进行贴图。但实际上,由于每个卡片的区别仅仅是文字,所以完全可以在内存动态生成。这样速度快节省了网络下载图片的时间以及维护图片的麻烦,同时文字和图片等样式也更容易控制。这也都是HTML5的canvas技术为大家带来的好处。
  4. 物体朝向:在布局过程中,每个卡片的旋转和朝向是一个要考虑的问题。例如球形,每个卡片要面向球形圆心发射线的外方向,螺旋形卡片则朝向水平外方向,等等。计算这些坐标和角度需要很多数学运算,光是求坐标系和直角坐标系转换之类的就够大家忙活一阵子了。而用TWaver就简单了:每个物体直接lookAt一个点就行了。例如球形卡片,每帧动画只要执行:node.lookAt(0,0,0)就行了,对吗?还不完全对。这样lookAt到中心点,不就“屁股”朝外了吗?用户看到的字是卡片的背面,是反的。要解决也简单,应当让它lookAt自己坐标两倍的地方,也就是圆心放射线的外面:node.lookAt(x*2, y*2, z*2),这样就对了。
  5. 发光。鼠标over每个物体,都会看到发光。而鼠标over在光晕位置,却不会触发over事件。这是怎么做到的呢?其实也是小技俩,大家可以看看程序,自己研究吧。

生成内存图片代码片段:

1 var url = canvas.toDataURL("image/png");
2 node.setStyle('front.m.texture.image',url);

球形布局坐标计算代码片段:

1 var radius=1000;
2 var phi = Math.acos( -1 + ( 2 * index ) / total );
3 var theta = Math.sqrt( total * Math.PI ) * phi;
4 var x = radius * Math.cos( theta ) * Math.sin( phi );
5 var y = radius * Math.sin( theta ) * Math.sin( phi );
6 var z = radius * Math.cos( phi );

程序和源代码都已经在TWaver的MONO DESIGN产品中,感兴趣的朋友可以登录在线网址www.mono-design.cn或下载产品包。赶紧试试吧!

 







分享到:
评论

相关推荐

    3D化学元素周期表下载资源

    在3D元素周期表中,JQuery被用来处理用户的交互事件,如鼠标点击、滚动和拖拽,使得用户可以自由旋转、放大周期表,仿佛亲手操作一个真实的化学实验室模型。同时,JQuery的动画效果使得元素周期表的转换流畅自然,...

    3D元素周期表

    在实际应用中,3D元素周期表不仅可以作为教育工具,帮助学生更直观地理解元素周期性的规律,还可以激发他们对化学的兴趣。同时,对于化学教师来说,这种交互式的学习资源可以提高课堂的互动性,提升教学效果。 总的...

    HTML化学元素周期表.zip

    HTML化学元素周期表是一种利用网页技术来展示化学元素周期性的互动工具。这个压缩包"HTML化学元素周期表.zip"包含了两个关键文件:"说明.htm"和"HTML化学元素周期列表",它们共同构建了一个功能丰富的JavaScript实现...

    通用规范汉字表(8105字)及化学元素周期表(118字)UNICODE编码(文本可复制).pdf

    2. 化学元素周期表:化学元素周期表是化学领域中用于展示元素之间关系的一种图表,它按照原子序数递增的顺序排列,且根据元素的电子层结构和化学性质把它们分为若干个周期和族。元素周期表是化学、物理学、材料科学...

    3D版元素周期表,下载即可使用

    这个“3D版元素周期表”就是一个创新的教育工具,它将传统的化学知识与现代的3D技术结合,为学生和教师提供了一个直观、生动的学习体验。以下是关于这个3D元素周期表以及其相关文件的详细知识: 首先,我们来看看...

    HTML化学元素周期表

    化学元素周期表是1869年俄国科学家门捷列夫(Dmitri Mendeleev)首创的,他将当时已知的63种元素依原子量大小并以表的形式排列,把有相似化学性质的元素放在同一行,就是元素周期表的雏形,在周期表中,元素是以元素的...

    炫酷的化学元素周期表.rar

    《炫酷的化学元素周期表》是一个以HTML和JavaScript技术构建的交互式学习资源,旨在以生动、直观的方式展示化学元素周期表。该资源包含了HTML文件和JavaScript代码,用户可以下载后自行查看或进行个性化定制。 HTML...

    化学元素周期表中文版-2024年更新至最新-PDF可高清打印

    化学元素周期表中文版-2024年更新至最新-PDF可高清打印

    BatFor_3D元素周期表.zip

    "BatFor_3D元素周期表.zip"是一个创新性的项目,它将化学元素周期表与前沿的Web技术相结合,为用户带来了全新的学习体验。这个项目不仅是一个实用的教学工具,更是一个展示JavaScript(Js)和three.js库强大功能的...

    化学元素周期表exe版本

    化学元素周期表exe版本,使用更方便。

    超酷3D元素周期表动态特效.zip

    适合所有人

    炫酷的化学元素周期表.zip

    《炫酷的化学元素周期表》是一个以特效和JavaScript技术实现的互动学习工具,它将传统的化学元素周期表以一种动态、引人入胜的方式展现出来,为学习化学的用户提供了全新的体验。在这个项目中,JavaScript作为主要的...

    HTML5元素周期表

    HTML5元素周期表是一种利用HTML5、JavaScript和CSS技术创建的交互式网页,它将化学元素周期表的概念与Web开发的元素相结合,为用户提供了炫酷的视觉体验和丰富的交互功能。这个项目展示了HTML5的新特性,如语义化...

    3D炫酷元素周期表源代码HTML

    【3D炫酷元素周期表源代码HTML】是一款利用HTML技术构建的互动式3D元素周期表,它将科学知识与现代网页技术相结合,为学习化学的用户提供了有趣且直观的体验。这款3D周期表不仅外观炫酷,还带有科技感,能够激发学生...

    3D动态变化的元素周期表.rar

    3D动态变化的元素周期表是一款创新的交互式学习工具,它利用先进的JavaScript技术将传统的化学元素周期表以三维立体的形式呈现出来,带给用户全新的视觉体验。这款软件支持多种展示模式,包括球形、圆柱形和平面模式...

    炫酷的元素周期表html,经典化学元素周期表页面源码

    分享一个超高级的元素周期表页面html源码,如果不显示自行替换里面JS文件

    精品源码 / 炫酷特效 / 3D展示 / 元素周期表

    这个3D元素周期表特效可以应用于教育软件、在线学习平台、科学博物馆的互动展示,甚至可以作为科普教育工具,帮助学生和公众更好地理解和记忆复杂的化学知识。同时,对于前端开发者而言,它也是一份宝贵的学习资料,...

Global site tag (gtag.js) - Google Analytics