一、前言
早期的我们,对于计算机等电子设备的交互基本上都是2d界面的,完全没有三维世界的立体感,一个是硬件的不支持, 对于逼真的3d场景,需要专门的图形加速GPU来进行计算,性能要求还是有的;一个是底层编码的繁琐性,让大多数人望而却步。
而如今,基本上所有的电子设备的CPU里都内置了3d图形加速,甚至还有专门的GPU来处理3d渲染。
基于这种情况下,浏览器的技术也得以更新换代,有了硬件的支撑,底层编码的繁琐性总是会有天才来进行简化的。
2011年3月,Kronos Group创建的WebGL腾空出世,它不需要JVM 就能自由运行,仅需要一个网络浏览器就能自由运行。
在此之前有Java 应用程序(JVM)和 Adobe 提供的 Stage3D API(Flash、AIR),
前者是比较难以建立依赖关系,不好用。
后者是因为flash是专用软件,所以没有成为网络标准。(也差不多寄了,现在浏览器都不支持flash了)
二、WebGL和其他的关系
1、WebGL
WebGL(Web Graphics Library)是Web上3D图形的新标准,它是为渲染2D图形和交互式3D图形而设计的。
WebGL 提供了与 ES 2.0(嵌入式系统)类似的功能,并且在现代 3D 图形硬件上表现良好。
WebGL是一个可与 HTML5 一起使用的 JavaScript API。
WebGL 代码写在 HTML5 的 <canvas>
标记内。它是一种规范,允许 Internet 浏览器访问使用它们的计算机上的图形处理单元 (GPU)。
2、 OpenGL
OpenGL(开放图形库)是用于 2D 和 3D 图形的跨语言、跨平台 API。它是命令的集合。
OpenGL存在于windows、部分unix和mac os平台,它高效利用了图形加速硬件GPU,当今OpenGL是视频行业领域中用于处理2D/3D图形的最为广泛接纳的API,基本上市面里的CAD、AR虚拟现实、3d类游戏等等,都是基于OpenGL开发的。
3、WebGL与OpenGL
WebGL是 OpenGL 的 JavaScript 绑定。WebGL 1.0 是其最新版本,由 khronos 组维护。
WebGL源自 OpenGL 的 ES 2.0 库,这是一个用于手机和其他移动设备的低级 3D API。
三、WebGL的优势
1、支持js编程
可以使用vue、jQuery等第三方js库配合使用。
2、支持移动浏览器
移动设备普及的现在,如果3d渲染不能支持移动浏览器的话,将会是一大遗憾。
3、开源
开源意味着能读取源码,了解内部的工作原理等等。(不过太难了看不懂- -)
4、不用额外编译和设置
WebGL集成在html5里,同时集成了js无需编译和自动内存管理的特性。
四、现状
虽然已经简化了很多步骤,但是单纯用WebGL开发,代码量还是比较大的。
如果场景比较复杂,那代码量不敢想象,直接劝退。
所以说WebGL的api仍然是低级别的。
创建复杂场景,我们应选用更高级的库或者框架,比如three.js等。
关系,从上往下依次调用
所在层面 | 级别 | 名称 |
---|---|---|
浏览器层面 | 高级别api | three.js等 |
浏览器层面 | 低级别api | WebGL |
操作系统层面 | 3d驱动 | OpenGL |
硬件层面 | 3d硬件 | GPU |
ps: 我是地霊殿__三無