hand
_1_12_137
4
返回栏目
0k
3k
5k
1k
2k
0.2k
2k
1k
2k
3k
2k
3k
2k
3k
3k
0.3k
0k
2k
0k
1k
0.1k
0k
0k
2k
2k
3k
0.2k
3k
0k
2k
2k
2k
3k
2k
2k
0k
4k
2k
2k
0k
3k
3k
2k
2k
2k
1k
3k
1k
3k
2k
1k
0.8k
2k
0k
2k
2k
2k
2k
3k
0.4k
4k
2k
5k
2k
3k
2k
3k
3k
4k
2k
3k
2k
3k
0.7k
2k
0.8k
3k
2k
4k
2k
2k
2k
2k
2k
3k
3k
3k
3k
4k
3k
3k
0k
2k
2k
0k
3k
2k
3k
1k
2k
2k
3k
3k
3k
3k
5k
3k
3k
3k
4k
3k
5k
4k
4k
4k
4k
1k
2k
2k
2k
2k
2k
2k
1k
2k
3k
3k
3k
3k
3k
2k
3k
4k
2k
2k
3k
5k
3k
3k
3k
4k
3k
3k
2k
3k
5k
4k
3k
4k
4k
2k
3k
3k
1k
3k
4k
4k
2k
2k
2k
3k
2k
4k
2k
4k
2k
4k
1k
2k
1k
2k
2k
1k
2k
2k
2k
2k
2k
2k
1k
1k
4k
3k
2k
2k
3k
3k
6k
2k
8k
3k
7k
2k
3k
3k
4k
3k
5k
4k
3k
3k
2k
2k
3k
3k
2k
2k
2k
3k
2k
6k
4k
4k
4k
4k
3k
3k
2k
4k
2k
3k
3k
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
0k
返回前端 - HTML5栏目
作者:
贺及楼
成为作者
更新日期:2025-02-27 12:25:34
WebGL(Web Graphics Library)是一种基于 OpenGL ES 2.0 的 3D 绘图标准,它允许网页开发者在浏览器中创建和展示高性能的 3D 图形,而无需安装任何插件。WebGL 利用了 GPU(图形处理单元)的强大计算能力,能够实时渲染复杂的 3D 场景,为用户带来沉浸式的视觉体验。
WebGL 的工作流程主要包括以下几个步骤:
<canvas>
元素作为绘图表面。canvas.getContext('webgl')
方法获取 WebGL 上下文对象,用于后续的绘图操作。下面是一个简单的 WebGL 示例,用于绘制一个彩色的三角形。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WebGL Triangle Example</title>
</head>
<body>
<canvas id="glCanvas" width="640" height="480"></canvas>
<script src="script.js"></script>
</body>
</html>
// 获取 canvas 元素
const canvas = document.getElementById('glCanvas');
// 获取 WebGL 上下文
const gl = canvas.getContext('webgl');
if (!gl) {
alert('无法初始化 WebGL,你的浏览器可能不支持。');
return;
}
// 顶点着色器代码
const vertexShaderSource = `
attribute vec2 a_position;
attribute vec4 a_color;
varying vec4 v_color;
void main() {
gl_Position = vec4(a_position, 0, 1);
v_color = a_color;
}
`;
// 片段着色器代码
const fragmentShaderSource = `
precision mediump float;
varying vec4 v_color;
void main() {
gl_FragColor = v_color;
}
`;
// 创建着色器函数
function createShader(gl, type, source) {
const shader = gl.createShader(type);
gl.shaderSource(shader, source);
gl.compileShader(shader);
const success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
if (success) {
return shader;
}
console.log(gl.getShaderInfoLog(shader));
gl.deleteShader(shader);
}
// 创建着色器程序函数
function createProgram(gl, vertexShader, fragmentShader) {
const program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);
const success = gl.getProgramParameter(program, gl.LINK_STATUS);
if (success) {
return program;
}
console.log(gl.getProgramInfoLog(program));
gl.deleteProgram(program);
}
// 创建顶点着色器和片段着色器
const vertexShader = createShader(gl, gl.VERTEX_SHADER, vertexShaderSource);
const fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fragmentShaderSource);
// 创建着色器程序
const program = createProgram(gl, vertexShader, fragmentShader);
// 定义顶点数据
const positions = [
0, 0.5,
-0.5, -0.5,
0.5, -0.5
];
const colors = [
1, 0, 0, 1,
0, 1, 0, 1,
0, 0, 1, 1
];
// 创建位置缓冲区
const positionBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);
// 创建颜色缓冲区
const colorBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW);
// 使用着色器程序
gl.useProgram(program);
// 获取属性位置
const positionAttributeLocation = gl.getAttribLocation(program, 'a_position');
const colorAttributeLocation = gl.getAttribLocation(program, 'a_color');
// 启用属性
gl.enableVertexAttribArray(positionAttributeLocation);
gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
gl.vertexAttribPointer(positionAttributeLocation, 2, gl.FLOAT, false, 0, 0);
gl.enableVertexAttribArray(colorAttributeLocation);
gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer);
gl.vertexAttribPointer(colorAttributeLocation, 4, gl.FLOAT, false, 0, 0);
// 设置清除颜色
gl.clearColor(0, 0, 0, 1);
// 清除画布
gl.clear(gl.COLOR_BUFFER_BIT);
// 绘制三角形
gl.drawArrays(gl.TRIANGLES, 0, 3);
<canvas>
元素作为绘图表面,并引入 JavaScript 文件。<canvas>
元素和 WebGL 上下文。gl.drawArrays
函数绘制三角形。WebGL 为网页游戏开发提供了强大的支持,能够实现逼真的 3D 场景、流畅的动画和实时交互效果。例如,一些在线角色扮演游戏、射击游戏等都可以使用 WebGL 来开发。
通过 WebGL 可以将复杂的数据以 3D 图形的形式展示出来,帮助用户更直观地理解数据之间的关系和趋势。例如,3D 柱状图、3D 散点图等。
WebGL 可以用于创建虚拟和增强现实体验,让用户在浏览器中就能感受到沉浸式的虚拟环境。例如,在线看房、虚拟旅游等。
要点 | 详情 |
---|---|
WebGL 简介 | 基于 OpenGL ES 2.0 的 3D 绘图标准,跨平台、高性能、开放 |
基本原理 | 创建画布、获取上下文、定义顶点数据、创建着色器、编译链接程序、设置缓冲区、绘制图形 |
应用示例 | 绘制彩色三角形,涉及 HTML 和 JavaScript 代码 |
应用场景 | 游戏开发、数据可视化、虚拟和增强现实 |
WebGL 为前端开发者提供了一个强大的工具,能够在网页中创建出令人惊叹的 3D 图形和交互效果。通过不断学习和实践,开发者可以利用 WebGL 实现更多复杂和有趣的应用。
前端 - HTML5
整章节共240节
快分享给你的小伙伴吧 ~