论坛首页 Web前端技术论坛

用WebGL显示22万个箱子

浏览 3297 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-12-26  

放下了Java Swing,最近两年一直都在研究HTML5和WebGL 3D方面的东西,这也是目前比较热门的技术领域。以前也对HTML5和WebGL产生质疑,企业应用能行么?js乱哄哄的语法、WebGL不成熟的标准...现在打开个门户网站都慢慢腾腾千呼万唤,我们还能期待网页上的2D甚至3D技术会有“酣畅淋漓”、“一气呵成”的感受吗?也许现在还差点火候。但是HTML5、WebGL等技术一直在飞速的发展,可能很快你就会惊讶它的能力。在我所在的产品项目里,就实验了在网页上加载22万个立方体箱子的例子,和大家分享。

 

首先new一个box和network放在网页上:

var box = new mono.DataBox();
var camera = new mono.PerspectiveCamera(60, 10 / 7, 0.1, 10000);
var network = new mono.Network3D(box, camera, 'canvas');

 

然后创建箱子对象。定义一个矩阵规模数量,循环new出count*count*count个箱子对象矩阵。为每个箱子设置其矩阵中的空间位置、设置透明贴图,最后add到box中进行显示即可。

 

暂设箱子间距gap为40,矩阵层数为3,则总计数量为3x3x3=27个:

var gap = 40, count = 3;

for (var k = 0; k < count; k++) {
  for (var i = 0; i < count; i++) {
    for (var j = 0; j < count; j++) {
      var node = new mono.Cube(20, 20, 20, 1, 1, 1);
      node.setStyle('m.texture.image', 'box.png');
      node.setPosition((i - count * 0.5) * gap, k * gap, (j - count / 2) * gap);
      box.add(node);
    }
  }
}

 

显示效果如下:

 

 

27个箱子确实太少了,就像大象拖鹅毛,没什么感觉。现在增加count到20,总计=20x20x20=8000个箱子。看看效果:

 



 

 

加载过程多费了一两秒,不过操作起来还是快如飞车,刷刷流畅,毫无压力!看来WebGL还是不错的。继续增加count到40,总计=40x40x40=64000个箱子。看效果:

 



 

 

加载耗时时间长了许多,不过显示和操作还是相当流畅。看来还不是极限,有继续压榨的空间。最后索性增加count到60,总计=60x60x60=216000。将近22万个箱子,WebGL和Chrome浏览器表现会怎么样呢?

 

哈,果然加载时间更加长了,浏览器甚至2次出现了“不响应”提示。为了看到结果,果断点击wait选择继续等待。最后耗时虽久,不过最终结果还是出来了。21.6万个箱子,一眼望去,基本上是千军万马,茫茫一片,也看不清个张三李四了:

 



 

 

操作了一下,虽然不算流畅,但还是可以响应鼠标操作的。考虑到这么大的海量数据,还算可以接受。

 

为了增加点趣味性,在箱子里面随机增加点小动物进去。增加了下面的几行代码就行了:

 

var billboard = new mono.Billboard();
billboard.s({
'm.texture.image' : 'dog.png',
'm.vertical' : true,
'm.alignment' : mono.BillboardAlignment.bottomCenter,
});
var position = node.getPosition();
billboard.setPosition(position);
box.add(billboard);

 

这样,在箱海中漫游,就可以无意中发现一只可爱的小动物了:



或者放几只小鸟也ok。接下来可以做一个“找狗狗”或“找小鸟”的游戏了,呵呵。

 



 

 

<a href="http://v.youku.com/v_show/id_XODU3MjczMDgw.html" target="_blank">可以点击观看WebGL显示22万个木箱视频</a>。

 

<embed src="http://player.youku.com/player.php/sid/XODU3MjczMDgw/v.swf" allowFullScreen="true" quality="high" width="640" height="480" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash"></embed>

 

不过,这也未必是WebGL的极限。现在技术、软件、硬件发展都很快,基于网页的3D展示能力肯定会有更大的提升和发展。到时候,复杂的3D应用在PC、平板、手机的网页上顺畅的跑,估计都不算是个事儿。

 

当然,性能和机器的配置有巨大的关系,尤其是显卡、CPU等关键硬件配置。强大的硬件永远是提升3D应用流畅度的最直接的手段。平板甚至手机的硬件能力比PC会弱很多,在实际应用中,不可能期待手持设备能显示海量的3D数据和复杂的物理场景。在实际3D应用开发中,我们还需要有针对性的对场景进行优化、精简,尽可能的保证用户的交互和视觉体验,然后再尽可能的显示更多的信息。

 



 

还有一个很大的好处是,这些程序可以直接用平板或手机打开运行。这对以后的企业开发来说,还是很有好处的,比维护各种native的app要方便多了。

 

习惯了Java Swing等老技术,作为HTML5和WebGL初学者,对一些技术点研究深度有限,希望大侠多多包涵指点。

 

  • 大小: 193.4 KB
  • 大小: 375.8 KB
  • 大小: 201.7 KB
  • 大小: 278.3 KB
  • 大小: 346 KB
  • 大小: 334.7 KB
  • 大小: 436.3 KB
   发表时间:2014-12-31  
大神重出江湖  必是我iteye的福音
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics