WebGL简易教程——结语
1 概述
笔者在几年前写过一系列关于WebGL的文章《WebGL简易教程——目录》,前端时间将其整理了一下,增加了一个在线案例的站点以便于学习查看。这里就顺便写一段结语吧。

2 观点
2.1 建议
这个系列文章写了十五篇,之所以不继续写了是因为写到后面代码越来越膨胀(比如《WebGL简易教程(十四):阴影》中的实现写了700行代码),一些高级的图形技术要通过WebGL这样底层的API来实现就不是一件很容易的事情。一般来说,要较好的实现比较高级的图形技术,最好需要经过一定的封装(可以参考一些图形引擎),否则代码复杂度会非常高。
因此,如果读者已经完成了这十五篇教程的学习,那么接下来就建议读者可以选一门图形引擎来学习,研究一下比较高级的图形技术的实现。其实如果学习时间很紧张,并且接受程度比较高,直接选择一门图形引擎学习也可以。当然WebGL这样底层的接口还是值得学习的,不过就类似于基本功,会对日后的工作产生直接或间接的助力。
另外,虽然已经有了Vulkan、WebGPU以及DX12这样的现代图形api,但是我不觉得初学者能直接入门这些更加底层的图像API。图形技术的发展与软件编程技术相反,不是越来越高级,反而越来越低级,倾向于更好地挖掘硬件的性能。没办法,目前硬件的发展就是跟不上图形技术的需求,性能总是绝对的刚需。你当然可以使用更加高级的图形引擎API,但是凡封装必有代价,你总有遇到需要使用底层API的时候。
2.2 趋势
笔者还记得当年学习WebGL的时候,主流浏览器还只支持WebGL 1.0,但是现在主流浏览器几乎都已经支持WebGL 2.0,甚至包括以封闭保守著称的Safari。也就是说,即使是Web端图形技术的趋势是WebGPU,但是WebGL自身也还是不断演进中。不要觉得支持WebGL 2.0没什么意义,要知道WebGL 2.0对应于嵌入式端的OpenGL ES3.0,以及桌面端的OpenGL 3.3,这使得我们增加了相当多的图形技术可以使用,比如实例化渲染、多目标渲染等等。更重要的意义是,WebGL已经是最轻量的图形技术API了,如果浏览器端都不支持的设备,你就可以光明正大地跟业主说需要设备升级了。其实在信创、嵌入式等项目中,因为一些兼容性问题,还是不得不上OpenGL这样的老家伙;你说WebGL要被WebGPU淘汰,那估计还得等很长一段时间。
还有一个很有意思的地方,前面我说苹果系的技术体系是很封闭保守的,在自家的设备上甚至不愿意支持OpenGL;但是在Safari上却乐于推进WebGL和WebGPU。其实原因很简单,我们所用的WebGL API其实并不是像我们设想的那样是直接使用显卡驱动里面OpenGL API,还是根据不同的平台使用这些平台上首选图像API接口。比如在Windows操作系统Chrome浏览器的WebGL,后台使用的其实是DX12;而苹果系统Safari浏览器的WebGL,后台使用的却是Metal。如果你进一步深入图形技术行业,你就知道这种图形API相互转义非常常见,这其实告诉我们一个道理:不同的图形API其实是大同小异的,关键是要掌握图形技术的思想。
3 教程
记得前些年WebGL最火爆的时候,很多HR会在前端行业招会WebGL的,也有很多前端程序员在询问是不是应该要接手WebGL的工作。其实传统意义上的前端和WebGL除了都使用JavaScript外,两者没有任何共同点。传统意义上的前端解决的是事务型的,约定俗成的界面交互性问题;WebGL则关注的是如何可视化能被人眼识别接受的不同行业的场景。WebGL其实属于图形领域,俗称就是“搞三维的”。让前端从业人员去做WebGL,无异于是让这个人换行业了,而且是换到了一个相对更加艰深的行业,多半是很难搞定的。
但是调换一下,如果一个图形从业者来搞WebGL,多半也是会对目前的前端技术感到眼花缭乱。说真的,现在的前端还能说上手很简单:我写一个html+js,丢到浏览器里面就能运行吗?说实话,应该不完全行了吧?至少我想要规范的ES6模块是不行的,至少我需要开一个HTTP服务器,将代码放到Web域内才行;更不谈后面使用构建工具,安装依赖库等等,这些都是隐形的入门成本。
笔者在整理以前写的WebGL教程的时候,本来也是想将代码修改的更加规范,符合目前的前端主流开发范式一点。但是改起来的时候就觉得,学习WebGL的重点应该是了解其中的图形技术,前端技术其实不是重点,更何况来看WebGL教程的可能并不太会前端。所以笔者还是保留了之前WebGL教程的代码:WebGLTutorial 。另外,笔者增加了一个在线案例的站点以便于学习查看,并且在线案例的项目也在Git上开源了:webgl-tutorial-online 。
具体来说,两者有什么区别呢?WebGLTutorial会更加原生一点,不用开启Web服务器,直接通过浏览器就可以运行。主要是用到一些文件资源,会引起跨域问题;但是原生的JS其实是由文件资源操作的,通过打开指定的文件就可以避开安全策略,可以不依赖Web服务器域内访问。笔者也是推荐使用这个代码进行学习,毕竟学习WebGL,JS不是关键,关键是学习其中的图形技术。当然你有前端基础,看看webgl-tutorial-online也行,其中的代码可能更规范一点,功能更多,所以学习成本也会高一点。
4 资源
在文章最后就列出本教程的相关资源:
WebGL简易教程——结语的更多相关文章
- WebGL简易教程(二):向着色器传输数据
目录 1. 概述 2. 示例:绘制一个点(改进版) 1) attribute变量 2) uniform变量 3) varying变量 3. 结果 4. 参考 1. 概述 在上一篇教程<WebGL ...
- WebGL简易教程(三):绘制一个三角形(缓冲区对象)
目录 1. 概述 2. 示例:绘制三角形 1) HelloTriangle.html 2) HelloTriangle.js 3) 缓冲区对象 (1) 创建缓冲区对象(gl.createBuffer( ...
- WebGL简易教程(四):颜色
目录 1. 概述 2. 示例:绘制三角形 1) 数据的组织 2) varying变量 3. 结果 4. 理解 1) 图形装配和光栅化 2) 内插过程 5. 参考 1. 概述 在上一篇教程<Web ...
- WebGL简易教程(六):第一个三维示例(使用模型视图投影变换)
目录 1. 概述 2. 示例:绘制多个三角形 2.1. Triangle_MVPMatrix.html 2.2. Triangle_MVPMatrix.js 2.2.1. 数据加入Z值 2.2.2. ...
- WebGL简易教程(七):绘制一个矩形体
目录 1. 概述 2. 示例 2.1. 顶点索引绘制 2.2. MVP矩阵设置 2.2.1. 模型矩阵 2.2.2. 投影矩阵 2.2.3. 视图矩阵 2.2.4. MVP矩阵 3. 结果 4. 参考 ...
- WebGL简易教程(九):综合实例:地形的绘制
目录 1. 概述 2. 实例 2.1. TerrainViewer.html 2.2. TerrainViewer.js 3. 结果 4. 参考 1. 概述 在上一篇教程<WebGL简易教程(八 ...
- WebGL简易教程(八):三维场景交互
目录 1. 概述 2. 实例 2.1. 重绘刷新 2.2. 鼠标事件调整参数 3. 结果 4. 参考 1. 概述 在上一篇教程<WebGL简易教程(七):绘制一个矩形体>中,通过一个绘制矩 ...
- WebGL简易教程(十):光照
目录 1. 概述 2. 原理 2.1. 光源类型 2.2. 反射类型 2.2.1. 环境反射(enviroment/ambient reflection) 2.2.2. 漫反射(diffuse ref ...
- WebGL简易教程(十一):纹理
目录 1. 概述 2. 实例 2.1. 准备纹理 2.2. 配置纹理 2.3. 使用纹理 3. 结果 4. 参考 1. 概述 在之前的之前的教程<WebGL简易教程(九):综合实例:地形的绘制& ...
- WebGL简易教程(十二):包围球与投影
目录 1. 概述 2. 实现详解 3. 具体代码 4. 参考 1. 概述 在之前的教程中,都是通过物体的包围盒来设置模型视图投影矩阵(MVP矩阵),来确定物体合适的位置的.但是在很多情况下,使用包围盒 ...
随机推荐
- journalctl -u docker 查看日志
转载注明出处: 1. 查看 Docker 服务的最新日志(实时滚动) sudo journalctl -u docker -f -f 参数表示 跟随(follow),会持续输出最新日志(类似 tail ...
- 被LangChain4j坑惨了!
最近在深度体验和使用 Spring AI 和 LangChain4j,从开始的满怀期待五五开,但最后极具痛苦的使用 LangChain4j,让我真正体验到了正规军和草台班子的区别. Spring AI ...
- Email邮箱验证码发送
以下文件保存到/static/email.txt <!DOCTYPE html> <html lang="en" xmlns:th="http://ww ...
- DeepWiki:AI驱动、免费且实用的 GitHub 源码阅读与分析神器!
前言 GitHub 作为全球最大的代码托管平台,汇聚了无数开发者的智慧结晶,为各行各业的技术进步提供了宝贵的资源.然而,面对浩瀚如海的代码库,如何高效地阅读.理解和分析源码,成为了摆在众多开发者面前的 ...
- 基于Kubernetes可扩展的Selenium 并行自动化测试部署及搭建(3)——基于k8s的selenium grid集群搭建
本篇主要讲解如何使用k8s搭建selenium grid集群 Selenium Grid集群部署 1. 首先我们将通过 Kubernetes 服务进行通信以到达hub和nodes.Kubernete ...
- Excel 拼接为 SQL 并打包 exe
关于 Excel 拼接 sql 这个操作, 我已经整过好几篇了, 当然在工作中也是蛮常用的, 今天主要是来写个终篇, 彻底结束它, 然后将代码进行打包为 exe 这样的桌面小软件, 除了自己用, 也可 ...
- Flutter内嵌H5页面与前端通信:实现无缝交互的技术浅析
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- Pytorch之Tensor学习
Pytorch之Tensor学习 Tensors是与数组和矩阵类似的数据结构,比如它与numpy 的ndarray类似,但tensors可以在GPU上运行.实际上,tensors和numpy数组经常共 ...
- WPF Thumb 滑块控件踩坑
最近在做一个仿 手机选择时间的控件,如下图,选用了 Thumb 滑块控件做上下滑动的功能.订阅了 Thumb_OnDragStarted.Thumb_DragDelta和Thumb_DragCompl ...
- 20250528 - Usual 攻击事件: 价差兑换与请君入瓮
背景信息 项目背景 VaultRouter 合约有用特权身份,可以通过 Usd0PP 合约将 USD0++ 以 1:1 的比例兑换成 USD0,随后通过 UniV3 将 USD0 swap 成 sUS ...