《WebGL编程指南》读书笔记
目录链接:https://blog.csdn.net/floating_heart/article/details/124001572
第一章 WebGL概述
WebGL,是一项用来在网页上绘制和渲染复杂三维图形(3D图形),并允许用户与之进行交互的技术。在其官网中的介绍如下:
WebGL™ is a cross-platform, royalty-free open web standard for a low-level 3D graphics API based on OpenGL ES, exposed to ECMAScript via the HTML5 Canvas element. Developers familiar with OpenGL ES 2.0 will recognize WebGL as a Shader-based API using GLSL, with constructs that are semantically similar to those of the underlying OpenGL ES API. It stays very close to the OpenGL ES specification, with some concessions made for what developers expect out of memory-managed languages such as JavaScript. WebGL 1.0 exposes the OpenGL ES 2.0 feature set; WebGL 2.0 exposes the OpenGL ES 3.0 API.
WebGL brings plugin-free 3D to the web, implemented right into the browser. Major browser vendors Apple (Safari), Google (Chrome), Microsoft (Edge), and Mozilla (Firefox) are members of the WebGL Working Group.
翻译过来就是:
WebGL™ 是一个跨平台、开放版权的开放式web标准,用于搭建基于OpenGL ES的底层3D图形API,并通过HTML5 Canvas元素向ECMAScript公开。熟悉OpenGL ES 2.0的开发人员将使用GLSL将WebGL识别为基于着色器的API,其结构在语义上与底层OpenGL ES API的结构相似。它与OpenGL ES规范非常接近,对开发人员期望的JavaScript等内存管理语言做出了一些让步。WebGL 1.0公开了OpenGL ES 2.0功能集;WebGL 2.0公开了OpenGL ES 3.0 API。
WebGL将无插件的3D技术引入网络,并直接在浏览器中实现。主要浏览器供应商苹果(Safari)、谷歌(Chrome)、微软(Edge)和Mozilla(Firefox)都是WebGL工作组的成员。
纵观上文,关于WebGL有几个重要的信息:
- 表层基于HTML5标准,通过Canvas元素公开
- 底层基于OpenGL,与OpenGL ES规范非常接近
- 暂时采用JavaScript在web端编辑
- 同时,WebGL是内嵌在浏览器中的(不是基于操作系统的),所以它具有很好的跨平台能力
为了判断浏览器是否支持WebGL,可以登录网站https://get.webgl.org/,如果支持,会出现以下内容:
当然,JavaScript也有方法测试浏览器是否支持WebGL,方法在网上有很多,在此不再总结。
WebGL的起源
在个人计算机上使用最广泛的两种三维图形渲染技术是Direct3D和OpenGL。
- Direct3D是微软DirectX技术的一部分,是一套由微软控制的编程接口(API),主要用在Windows平台;
- OpenGL全称Open Graphics Library,是一套开源的三维图形开发标准,在多种平台上都有广泛的应用,也是WebGL的重要基石。
相信很多初步接触OpenGL的小伙伴都使用过glut的C++库,现在glut库已经不再维护,更多的库可以从网上找到
OpenGL最初由SGI(Silicon Graphics Inc)开发,并在1992年发布为开源标准。多年以来,OpenGL经历了数个版本,部分版本更新情况及其与WebGL的关系如下图所示:
从OpenGL2.0开始,这一三维图形技术支持了一个非常重要的特性:可编程着色器方法(programmable shader functions),这一方法被OpenGL ES 2.0继承并成为WebGL 1.0标准的核心部分。
着色器方法,或称着色器,使用一种类似于C的编程语言实现了精美的视觉效果。编写着色器的语言又称为着色器语言(shading language),OpenGL ES 2.0基于OpenGL着色器语言(GLSL),因此后者又被称为OpenGL ES着色器语言(GLSL ES)。WebGL基于OpenGL ES 2.0,也使用GLSL ES编写着色器。
这一部分的缩写要留有印象,后文可能会出现
OpenGL规范的更新和标准化由Khronos组织(一个非盈利的行业协会,专注于制定、发布、推广多种开放标准)负责。2009年,Khronos建立了WebGL工作小组,开始基于OpenGL ES着手建立WebGL规范,并于2011年发布了WebGL规范的第一个版本。
WebGL程序的结构
在网页引入WebGL之后,除了原本的HTML(超文本标记语言)和JavaScript语言之外,还包含了着色器语言GLSL ES。下图展示了传统动态网页和使用WebGL的网页的软件结构:
因为通常GLSL ES是(以字符串的形式)在JavaScript中编写的,所以,虽然WebGL网页更加复杂,在编写时也只用到了HTML文件和JavaScript文件。