`
xiaozhonghua
  • 浏览: 254130 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用WebGL显示22万个箱子

阅读更多

放下了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。接下来可以做一个“找狗狗”或“找小鸟”的游戏了,呵呵。

 



 

 

可以点击观看WebGL显示22万个木箱视频

 

 

不过,这也未必是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
分享到:
评论

相关推荐

    unity 用安卓手机 打开webgl 浏览器全屏 显示模版

    本文将详细探讨如何在Android手机上实现WebGL项目的全屏显示。 首先,我们需要理解WebGL是一种基于OpenGL标准的JavaScript API,它允许在任何兼容的浏览器中进行硬件加速的3D图形渲染。Unity提供了将项目导出为...

    使用webGL实现的全景图demo

    全景图是一种通过特殊技术将360度全方位的图像展示出来的视觉效果,广泛应用于虚拟现实、旅游、房地产等领域。...这个项目不仅可以帮助你掌握WebGL的基本用法,还能提升你在3D图形编程和前端开发方面的技能。

    WEBGL_webgl_

    这个“WEBGL_webgl_”很可能是一份教程或教材,旨在帮助初学者掌握WebGL技术,并随着学习者的进步不断更新内容。 在WebGL中,我们主要通过JavaScript与GPU(图形处理器)进行通信,创建和操纵复杂的几何形状,应用...

    Unity通用WebGL模板Universal WebGL Template 1.2.1

    在Unity中,使用WebGL模板的过程通常包括以下几个步骤: 1. **导入模板**:首先,你需要导入`Universal WebGL Template 1.2.1.unitypackage`文件。这可以通过Unity编辑器的"Asset"菜单下的"Import Package" -&gt; ...

    webGL编程示例源码

    《WebGL编程指南》的主要篇幅讲解了WebGL 原生API 和三维图形学的基础知识,包括渲染管线、着色器、矩阵变换、着色器编程语言(GLSL ES)等等,也讲解了使用WebGL 渲染三维场景的一般技巧,如光照、阴影、雾化等等。...

    WebGL中文输入中文显示TMP

    在Unity WebGL中实现中文输入是一个复杂的问题,因为浏览器的原生输入框在WebGL中不可用。然而,有一些第三方解决方案可以帮助实现中文输入  TextMesh Pro 是 Unity 中用于高级文本渲染的强大工具,支持多种语言和...

    Unity webGL透明背景Demo

    Unity WebGL 是一种强大的技术,它允许开发者使用Unity游戏引擎创建的3D和2D内容在网页上运行,无需任何插件。在这个“Unity WebGL透明背景Demo”中,我们看到一个专注于实现Unity WebGL项目的透明背景的示例。这个...

    Unity WebGL下读取Excel

    Unity WebGL 是一个强大的游戏开发平台,它允许开发者创建交互式3D和2D内容,并且可以直接在网页浏览器中运行,无需任何插件。WebGL是一种基于OpenGL标准的JavaScript API,用于在任何兼容的Web浏览器中进行3D图形...

    webgl显示obj和mtl,带注释

    在这个项目中,我们关注的是如何使用WebGL来显示OBJ和MTL文件,这两种文件格式广泛用于3D模型的存储和交换。OBJ文件包含了3D模型的几何数据,如顶点、面和纹理坐标,而MTL文件则定义了模型的材质属性,如颜色、反射...

    web端3d渲染插件,可以直接在web端调用webgl显示3d模型

    web端3d渲染插件,可以直接在web端调用webgl显示3d模型

    SuperMap-webgl3D vue示例demo

    通过运行这个示例项目,开发者可以学习到如何设置和使用SuperMap的WebGL接口,如何结合Vue.js的生命周期方法和数据绑定来实现地图的动态交互,以及如何组织和架构一个复杂的前端GIS应用。此外,对于想要深入了解...

    基于js判断浏览器是否支持webGL.docx

    在文章的最后,作者还提供了一个错误信息处理函数getWebGLErrorMessage(),用于在浏览器不支持WebGL时显示错误信息。 通过本文,读者可以了解到如何使用JavaScript判断浏览器是否支持WebGL,并且掌握了Detector对象...

    WebGL编程指南PDF和源码

    2. **坐标系统与投影**:WebGL使用右手坐标系,理解坐标变换和投影(透视投影和平行投影)对于正确显示3D物体至关重要。 3. **顶点和着色器**:顶点是3D模型的基本构建块,而着色器则负责计算每个像素的颜色。顶点...

    WebGL编程指南函数库

    这个“WebGL编程指南函数库”包含了一系列辅助脚本,帮助开发者更方便地进行WebGL编程。以下是这些脚本的核心功能和作用: 1. **cuon-matrix.js**: 这个库提供了矩阵操作的功能,对于WebGL中的几何变换至关重要。在...

    Unity WebGL中文输入 支持输入法跟随 支持全屏(Dome)

    Unity WebGL 是一个强大的跨平台游戏开发工具,它允许开发者创建互动3D和2D应用程序,并在Web浏览器中直接运行,无需额外的插件。在这个Dome项目中,我们看到Unity WebGL已经实现了对中文输入的支持,这使得中国用户...

    WebGL 开发介绍.zip

    1. OpenGL:WebGL的基础是OpenGL,这是一个用于渲染2D和3D图形的标准,广泛应用于桌面应用程序。 2. JavaScript接口:WebGL将OpenGL的函数转换为JavaScript接口,使得Web开发者能够通过JavaScript调用这些图形渲染...

    WebGL Inspector chrome插件 crx格式

    6. **时间线视图**:提供一个时间线视图,显示每个渲染帧的详细时间消耗,有助于优化渲染效率。 7. **离线安装**:CRX文件是Chrome扩展程序的打包格式,WebGL Inspector的CRX文件允许用户在没有网络连接的情况下...

    解决webgl输入框无法输入中文插件

    针对这个问题,一种可能的解决方案是使用特殊的WebGL输入管理插件,如`WebGlInputChinese.unitypackage`,它可能包含了一套针对中文输入优化的API和组件。这类插件可能通过模拟键盘事件或者与浏览器更深度的集成来绕...

    webgl文档以及工具

    9. **WebGL与Three.js**:Three.js是一个基于WebGL的JavaScript库,它简化了WebGL的使用,提供了丰富的3D对象、动画、相机控制等功能,让3D开发变得更加简单。 10. **学习路径**:掌握WebGL通常需要学习基本的3D...

Global site tag (gtag.js) - Google Analytics