浏览器提供的 WebGL API 是 OpenGL ES 的 JavaScript 绑定版本,它赋予了开发者操作 GPU 的能力。
1、WebGL绘图可分为五步
- 创建上下文WebGL
- 创建WebGL程序
- 将数据存入缓冲区
- 将缓冲区数据读取到gpu
- gpu执行WebGL程序,输出结果

2、WebGL实现可视化案例
<template>
<canvas width="400" height="300" class="webgl"></canvas>
</template>
<script>
export default {
mounted () {
this.webglRender()
},
methods: {
webglRender () {
const canvas = document.getElementsByClassName('webgl')[0]
const webgl = canvas.getContext('webgl')
const vertex = `attribute vec2 position;
varying vec3 color;
void main() {
gl_PointSize = 1.0;
color = vec3(0.5 + position * 0.5, 0.0);
gl_Position = vec4(position * 0.5, 1.0, 1.0);
}`
const fragment = `precision mediump float;
varying vec3 color;
void main() {
gl_FragColor = vec4(color, 1.0);
} `
const vertexShader = webgl.createShader(webgl.VERTEX_SHADER)
webgl.shaderSource(vertexShader, vertex)
webgl.compileShader(vertexShader)
const fragmentShader = webgl.createShader(webgl.FRAGMENT_SHADER)
webgl.shaderSource(fragmentShader, fragment)
webgl.compileShader(fragmentShader)
const program = webgl.createProgram()
webgl.attachShader(program, vertexShader)
webgl.attachShader(program, fragmentShader)
webgl.linkProgram(program)
webgl.useProgram(program)
const points = new Float32Array([ -1, -1, 0, 1, 1, -1 ])
const bufferId = webgl.createBuffer()
webgl.bindBuffer(webgl.ARRAY_BUFFER, bufferId)
webgl.bufferData(webgl.ARRAY_BUFFER, points, webgl.STATIC_DRAW)
const vPosition = webgl.getAttribLocation(program, 'position')
webgl.vertexAttribPointer(vPosition, 2, webgl.FLOAT, false, 0, 0)
webgl.enableVertexAttribArray(vPosition)
webgl.clear(webgl.COLOR_BUFFER_BIT)
webgl.drawArrays(webgl.TRIANGLES, 0, points.length / 2)
}
}
}
</script>
顶点着色器的作用
- 通过 gl_Position 设置顶点
- 向片元着色器传递数据
注意点:
- GLSL语法在使用时需要注意后面的结束符号;
- webgl绘图的特点:并行处理像素点
实现效果图
