放下了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的极限。现在技术、软件、硬件发展都很快,基于网页的3D展示能力肯定会有更大的提升和发展。到时候,复杂的3D应用在PC、平板、手机的网页上顺畅的跑,估计都不算是个事儿。
当然,性能和机器的配置有巨大的关系,尤其是显卡、CPU等关键硬件配置。强大的硬件永远是提升3D应用流畅度的最直接的手段。平板甚至手机的硬件能力比PC会弱很多,在实际应用中,不可能期待手持设备能显示海量的3D数据和复杂的物理场景。在实际3D应用开发中,我们还需要有针对性的对场景进行优化、精简,尽可能的保证用户的交互和视觉体验,然后再尽可能的显示更多的信息。
还有一个很大的好处是,这些程序可以直接用平板或手机打开运行。这对以后的企业开发来说,还是很有好处的,比维护各种native的app要方便多了。
习惯了Java Swing等老技术,作为HTML5和WebGL初学者,对一些技术点研究深度有限,希望大侠多多包涵指点。
相关推荐
本文将详细探讨如何在Android手机上实现WebGL项目的全屏显示。 首先,我们需要理解WebGL是一种基于OpenGL标准的JavaScript API,它允许在任何兼容的浏览器中进行硬件加速的3D图形渲染。Unity提供了将项目导出为...
全景图是一种通过特殊技术将360度全方位的图像展示出来的视觉效果,广泛应用于虚拟现实、旅游、房地产等领域。...这个项目不仅可以帮助你掌握WebGL的基本用法,还能提升你在3D图形编程和前端开发方面的技能。
这个“WEBGL_webgl_”很可能是一份教程或教材,旨在帮助初学者掌握WebGL技术,并随着学习者的进步不断更新内容。 在WebGL中,我们主要通过JavaScript与GPU(图形处理器)进行通信,创建和操纵复杂的几何形状,应用...
在Unity中,使用WebGL模板的过程通常包括以下几个步骤: 1. **导入模板**:首先,你需要导入`Universal WebGL Template 1.2.1.unitypackage`文件。这可以通过Unity编辑器的"Asset"菜单下的"Import Package" -> ...
《WebGL编程指南》的主要篇幅讲解了WebGL 原生API 和三维图形学的基础知识,包括渲染管线、着色器、矩阵变换、着色器编程语言(GLSL ES)等等,也讲解了使用WebGL 渲染三维场景的一般技巧,如光照、阴影、雾化等等。...
在Unity WebGL中实现中文输入是一个复杂的问题,因为浏览器的原生输入框在WebGL中不可用。然而,有一些第三方解决方案可以帮助实现中文输入 TextMesh Pro 是 Unity 中用于高级文本渲染的强大工具,支持多种语言和...
Unity WebGL 是一种强大的技术,它允许开发者使用Unity游戏引擎创建的3D和2D内容在网页上运行,无需任何插件。在这个“Unity WebGL透明背景Demo”中,我们看到一个专注于实现Unity WebGL项目的透明背景的示例。这个...
Unity WebGL 是一个强大的游戏开发平台,它允许开发者创建交互式3D和2D内容,并且可以直接在网页浏览器中运行,无需任何插件。WebGL是一种基于OpenGL标准的JavaScript API,用于在任何兼容的Web浏览器中进行3D图形...
在这个项目中,我们关注的是如何使用WebGL来显示OBJ和MTL文件,这两种文件格式广泛用于3D模型的存储和交换。OBJ文件包含了3D模型的几何数据,如顶点、面和纹理坐标,而MTL文件则定义了模型的材质属性,如颜色、反射...
web端3d渲染插件,可以直接在web端调用webgl显示3d模型
通过运行这个示例项目,开发者可以学习到如何设置和使用SuperMap的WebGL接口,如何结合Vue.js的生命周期方法和数据绑定来实现地图的动态交互,以及如何组织和架构一个复杂的前端GIS应用。此外,对于想要深入了解...
这个“WebGL编程指南函数库”包含了一系列辅助脚本,帮助开发者更方便地进行WebGL编程。以下是这些脚本的核心功能和作用: 1. **cuon-matrix.js**: 这个库提供了矩阵操作的功能,对于WebGL中的几何变换至关重要。在...
在Unity WebGL中实现中文输入是一个复杂的问题,因为浏览器的原生输入框在WebGL中不可用。然而,有一些第三方解决方案可以帮助实现中文输入 TextMesh Pro 是 Unity 中用于高级文本渲染的强大工具,支持多种语言和...
Unity WebGL 是一个强大的跨平台游戏开发工具,它允许开发者创建互动3D和2D应用程序,并在Web浏览器中直接运行,无需额外的插件。在这个Dome项目中,我们看到Unity WebGL已经实现了对中文输入的支持,这使得中国用户...
1. OpenGL:WebGL的基础是OpenGL,这是一个用于渲染2D和3D图形的标准,广泛应用于桌面应用程序。 2. JavaScript接口:WebGL将OpenGL的函数转换为JavaScript接口,使得Web开发者能够通过JavaScript调用这些图形渲染...
6. **时间线视图**:提供一个时间线视图,显示每个渲染帧的详细时间消耗,有助于优化渲染效率。 7. **离线安装**:CRX文件是Chrome扩展程序的打包格式,WebGL Inspector的CRX文件允许用户在没有网络连接的情况下...
2. **坐标系统与投影**:WebGL使用右手坐标系,理解坐标变换和投影(透视投影和平行投影)对于正确显示3D物体至关重要。 3. **顶点和着色器**:顶点是3D模型的基本构建块,而着色器则负责计算每个像素的颜色。顶点...
在文章的最后,作者还提供了一个错误信息处理函数getWebGLErrorMessage(),用于在浏览器不支持WebGL时显示错误信息。 通过本文,读者可以了解到如何使用JavaScript判断浏览器是否支持WebGL,并且掌握了Detector对象...
针对这个问题,一种可能的解决方案是使用特殊的WebGL输入管理插件,如`WebGlInputChinese.unitypackage`,它可能包含了一套针对中文输入优化的API和组件。这类插件可能通过模拟键盘事件或者与浏览器更深度的集成来绕...