WebGL 是基于 OpenGL ES 2.0 的浏览器 GPU 加速图形 API,需手动管理着色器、缓冲区和矩阵;实现 3D 效果需四步:准备 canvas 上下文、编写编译 GLSL 着色器、上传几何数据至 GPU、循环渲染并更新变换;Three.js 封装底层操作,提供高层对象与模型加载能力,推荐初学者优先使用。

WebGL 是浏览器中运行的 JavaScript API,用于在网页上直接调用 GPU 渲染高性能 3D(和 2D)图形,无需插件。它基于 OpenGL ES 2.0 规范,底层使用 GLSL 着色器语言控制顶点与像素,是实现网页端实时 3D 视觉效果的核心技术。
WebGL 的本质:GPU 加速的绘图上下文
它不是独立的“3D 引擎”,而是一个低阶图形接口——你需要手动管理缓冲区、着色器、纹理、矩阵变换等。浏览器通过 canvas 元素获取 WebGL 渲染上下文(webgl 或 webgl2),之后所有绘制都通过该上下文的 JavaScript 方法完成。
- 支持硬件加速,帧率高、响应快,适合交互式 3D 场景
- 不内置相机、光照、模型加载等高级功能,需自行实现或借助库(如 Three.js)
- 兼容现代主流浏览器(Chrome、Firefox、Edge、Safari 15.2+ 支持 WebGL 2)
创建基础 3D 效果的四个关键步骤
从空白页面到旋转立方体,核心流程固定:
-
准备 canvas 与上下文:设置
标签,调用getContext('webgl')获取渲染上下文,检查是否成功 - 编写并编译着色器:用 GLSL 写顶点着色器(处理位置/坐标变换)和片元着色器(决定每个像素颜色),通过 JavaScript 编译、链接成着色器程序
-
准备几何数据:定义顶点坐标、法线、纹理坐标等,存入
Float32Array,再上传到 GPU 缓冲区(bufferData) -
渲染循环:清空画布(
clear),启用着色器程序,绑定缓冲区,设置 uniform 变量(如 MVP 矩阵、时间)、调用drawArrays或drawElements
让 3D 动起来:变换与动画的关键
静态模型只是起点。真实视觉效果依赖实时计算:
立即学习“Java免费学习笔记(深入)”;
- 用
mat4矩阵(通常借助gl-matrix库)组合模型(model)、视图(view)、投影(projection)矩阵,传给顶点着色器统一变量(uniform) - 在渲染循环中更新
model矩阵(如绕 Y 轴旋转:mat4.rotate(yRot, yRot, [0,1,0], time * 0.5)),实现平滑旋转/缩放/移动 - 利用
uniform float uTime向着色器传入当前时间,可在片元着色器中做动态渐变、噪声、UV 动画等视觉效果
更高效的方式:用 Three.js 快速构建 3D 场景
原生 WebGL 强大但繁琐。Three.js 封装了大量常用操作,大幅降低门槛:
- 自动管理着色器、缓冲区、矩阵;提供
Mesh、Camera、Light、Renderer等高层对象 - 一行代码加载 glTF 模型:
new GLTFLoader().load('model.glb', (gltf) => scene.add(gltf.scene)) - 内置轨道控制器(
OrbitControls)、后处理(EffectComposer)、物理(配合 Cannon-es)等扩展能力
对于大多数项目,建议从 Three.js 入手,理解其原理后再深入 WebGL 底层优化性能瓶颈。











