HTML5画布上实现3 d动态图图表的案例?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!
发现现在工业SCADA上或者电信网管方面用图表的特别多,虽然绝大部分人在图表制作方面用的是echarts,他确实好用,但是有些时候我们不能调用别的插件,这个时候就得自己写这些美丽的图表了,然而图表轻易做不成美丽的…看到有一个网站上在卖的图表,感觉挺好看的,就用HT Web 3 d做了一个小例子,挺简单的,也挺好看的,哈哈~
动态效果图如下:
这个例子用HT实现真的很容易,首先创建一个HT中最基础的dm数据模型,然后将数据模型添加进g3d 3 d组件中,再设置3 d中的视角并把3 d组件添加进身体元素中:
dm=new ht.DataModel (); g3d=new ht.graph4d.Graph4dView (dm); g3d。setEye (0、185、300); g3d.addToDOM (); .style g3d.getView ()。背景=& # 39;# 000 & # 39;;
接着就是造这五个图表图表条了,我的思路是这样的,里层有一个节点,外层一个透明的节点,底部一个3 d的文字显示当前的百分比。
里层的节点非常容易,我直接用的HT封装的HT。节点创建了一个新的节点对象,然后通过节点。年代方法来设置节点节点的样式:
=new ht.Node var节点(); node.s ({ & # 39;shape3d& # 39;: cylinderModel, & # 39;shape3d.color& # 39;:颜色, & # 39;3 d.movable& # 39;:假的 }); node.a ({ & # 39;myHeight& # 39;: s3 [1], }); 节点。s3 p3 ([p3 [0], [1]/2, p3 [2]]); node.s3 (s3); dm.add(节点);
其中要说明的是,& # 39;shape3d& # 39;: cylinderModel这个样式的设置,首先,shape3d属性指定显示为3 d模型的图标效果,cylinderModel是用HT自定义的一个3 d模型,可参考HT Web建模手册:
cylinderModel=ht.Default。createCylinderModel(1000, 0, 1000,假的,假的,真的,真的),
然后设置了一个动态变化的属性myHeight,在HT中,节点。一方法是预留给用户存储业务数据的,我们可以在这边添加任意多个属性。
接下来我们要创建的是外部的透明节点,这个节点的构造方式基本上与内部节点相同,就是多了一点“透明”的样式设置:
var cNode=new ht.Node (); cNode.s ({ & # 39;shape3d& # 39;: cylinderModel, & # 39;shape3d.transparent& # 39;:没错, & # 39;shape3d.opacity& # 39;: 0.2, & # 39;label.color& # 39;: & # 39; # fff& # 39; & # 39;3 d.movable& # 39;:假的 }); cNode。现年50岁的p3 ([p3 [0] p3 [2]]); cNode。s3 (100, 20); dm.add (cNode);
要先设置的shape3d。透明的为真,再设置的shape3d。不透明的透明度。
最后是3 d文字,呈现3 d文字需要一个json格式的字体字体,然后通过ht.Default。loadFontFace来加载json格式的字体到内存中,详情请参考HT Web 3 d手册:
ht.Default.loadFontFace (& # 39;。/wenquanyi.json& # 39;,函数(){//? var=new ht.Node文本(); 文本。s3 ([5, 5, 5]); text.p3 (cNode.p3 () [0] 5, -10 0); dm.add(文本); 类({ & # 39;shape3d& # 39;:& # 39;文本# 39; & # 39;shape3d.text& # 39;: node.a (& # 39; myHeight& # 39;) + & # 39; % & # 39; & # 39;shape3d.text.curveSegments& # 39;: 1, & # 39;3 d.movable& # 39;:假的 }); });
因为我们用的字体字体的绘制方式是无数个三角形构成的一个字,会占用很大的内存,所以我把图形的曲线的精细度调得较低,但是还是很清晰,如果你们能找到性能更好的字体,可以使用并且告知我一下,我们目前没找到占用内存小的字体。
最后,要动态的变化图表图表中的柱形图,我们得设置动画,并且将3 d字体也同步更新数值:
setInterval(函数(){ 如果(node.a (& # 39; myHeight& # 39;) & lt;100){ node.a (& # 39; myHeight& # 39;, (node.getAttr (& # 39; myHeight& # 39;) + 1)); 节点。s3 (20, node.a (& # 39; myHeight& # 39;), 20); 节点。p3 (p3 [0] node.a (& # 39; myHeight& # 39;)/2, p3 [2]); 其他}{ node.a (& # 39; myHeight& # 39;, 0); 节点。s3 ([0, 20]); 节点。p3 ([p3 [0] 0 p3 [2]]); } 如果(文本)类(& # 39;shape3d.text& # 39;, node.a (& # 39; myHeight& # 39;) + & # 39; % & # 39;); },100)、HTML5画布上实现3 d动态图图表的案例