WebGL(Web Graphics Library)是一个 JavaScript API,用于在 HTML5 <canvas> 元素中渲染高性能的 2D 和 3D 图形,无需插件,底层基于 OpenGL ES。
下面是一个快速入门指南,帮你快速理解 WebGL 的基本使用方式:
🚀 一、环境准备
只需要一个支持 WebGL 的浏览器(如 Chrome、Firefox)和一段 HTML/JS 代码,无需额外安装。
🧱 二、基本结构
下面是一个最简单的 WebGL 示例,清空一个 canvas 为红色:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <!DOCTYPE html> <html lang="en"> <head>   <meta charset="UTF-8">   <title>WebGL Quick Start</title>   <style> canvas { width: 100%; height: 100%; } </style> </head> <body>   <canvas id="glCanvas" width="500" height="500"></canvas>   <script>     const canvas = document.getElementById('glCanvas');     const gl = canvas.getContext('webgl'); // 获取 WebGL 上下文     if (!gl) {       alert("你的浏览器不支持WebGL");     }     // 设置清屏颜色为红色 (RGBA)     gl.clearColor(1.0, 0.0, 0.0, 1.0);     // 清除颜色缓冲区     gl.clear(gl.COLOR_BUFFER_BIT);   </script> </body> </html> | 
🧠 三、核心概念快速扫盲
| 名称 | 作用 | 
|---|---|
| Canvas | HTML 渲染画布 | 
| WebGL Context | WebGL 绘图上下文对象 | 
| Shader(着色器) | GPU 上运行的小程序,分为顶点着色器和片元着色器 | 
| Buffer | 存储顶点等数据的缓冲区 | 
| Attribute / Uniform | 向 Shader 传递数据 | 
| Texture | 贴图 | 
| Program | WebGL 程序(组合了着色器) | 
🟢 四、绘制一个三角形
这是 WebGL 的“Hello Triangle”示例:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | <script> const canvas = document.getElementById("glCanvas"); const gl = canvas.getContext("webgl"); const vertexShaderSource = `   attribute vec2 a_position;   void main() {     gl_Position = vec4(a_position, 0.0, 1.0);   } `; const fragmentShaderSource = `   void main() {     gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0); // 绿色   } `; // 创建着色器函数 function createShader(gl, type, source) {   const shader = gl.createShader(type);   gl.shaderSource(shader, source);   gl.compileShader(shader);   return shader; } // 创建程序函数 function createProgram(gl, vertexShader, fragmentShader) {   const program = gl.createProgram();   gl.attachShader(program, vertexShader);   gl.attachShader(program, fragmentShader);   gl.linkProgram(program);   return program; } // 创建着色器 const vertexShader = createShader(gl, gl.VERTEX_SHADER, vertexShaderSource); const fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fragmentShaderSource); const program = createProgram(gl, vertexShader, fragmentShader); // 定义三角形顶点 const vertices = new Float32Array([   0, 0.5,   -0.5, -0.5,   0.5, -0.5, ]); // 创建缓冲区并传入数据 const buffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buffer); gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW); // 使用程序并绑定属性 gl.useProgram(program); const positionLoc = gl.getAttribLocation(program, "a_position"); gl.enableVertexAttribArray(positionLoc); gl.vertexAttribPointer(positionLoc, 2, gl.FLOAT, false, 0, 0); // 设置背景色并绘制 gl.clearColor(0, 0, 0, 1); gl.clear(gl.COLOR_BUFFER_BIT); gl.drawArrays(gl.TRIANGLES, 0, 3); </script> | 
📚 五、推荐学习路线
- 基础概念
- WebGL 渲染管线(顶点着色器 → 光栅化 → 片元着色器)
- 坐标系统(NDC、视口)
 
- 动手练习
- 绘制点、线、三角形
- 使用颜色、位置数据
 
- 深入进阶
- 加载图片贴图
- 加入矩阵变换(平移、旋转、缩放)
- 与 3D 模型结合
 
- 推荐框架(加速开发)
- Three.js(WebGL 封装库)
- regl、twgl.js(函数式封装)
 
🎁 六、学习资源
- 官方文档:WebGL Fundamentals
- 三维封装库:Three.js 快速上手教程(适合快速开发大屏可视化)
- 中文社区教程:WebGL 中文教程
 
				