闽公网安备 35020302035485号
前言
WebGL(全写Web Graphics Library)是一种3D绘图协议,它允许将JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,为HTML5 Canvas提供硬件3D加速渲染。这样,Web开发人员就可以借助系统显卡在浏览器里更流畅地展示3D场景和模型,并创建复杂的导航和数据视觉化。WebGL技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂3D结构的网站页面,甚至可以用来设计3D网页游戏等等。
这篇文章,我将结合代码,在浏览器中先画一个点。
实现代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>堆代码 duidaima.com</title>
</head>
<body>
<canvas id="canvas" width="400" height="400">
此浏览器不支持canvas <!-- 兼容不支持canvas浏览器的提示信息 -->
</canvas>
<script>
const ctx = document.getElementById("canvas"); // 获取canvas对象
const gl = ctx.getContext("webgl"); // 获取上下文【和canvas不一样】
// 顶点着色器
const VERTEX_SHADER_SOURCE = `
// 必须要存在main函数
void main() {
// 要绘制点的坐标
gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
// 点的大小
gl_PointSize = 20.0;
}
`;
// 片着色器
const FRAGMENT_SHADER_SOURCE = `
void main() {
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
`;
// 创建着色器
const vertexShader = gl.createShader(gl.VERTEX_SHADER);
const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(vertexShader, VERTEX_SHADER_SOURCE); // 指定着色器源码
gl.shaderSource(fragmentShader, FRAGMENT_SHADER_SOURCE); // 指定着色器源码
// 编译着色器
gl.compileShader(vertexShader);
gl.compileShader(fragmentShader);
// 创建一个程序对象【作用就是关联JavaScript和gl程序】
const program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);
gl.useProgram(program);
// 三个参数分别是绘制的图形是什么, 从哪个开始,使用几个顶点
gl.drawArrays(gl.POINTS, 0, 1)
</script>
</body>
</html>
使用上面的代码,将在浏览器中得到一个点,
const ctx = document.getElementById("canvas");
const gl = ctx.getContext("webgl");
这两行代码主要是获取上下文,与canvas不同的是,gl上下文里面的参数是webgl,而不是canvas中的2d或者3d。gl.drawArrays(gl.LINES, 0, 1) // 绘制线段 // 最少需要两个点 gl.drawArrays(gl.TRANGLES, 0, 1) // 绘制三角形 // 最少需要三个点同样,对于一些固定的流程,我们可以封装函数,这个对于封装,小遍这篇文章先将流程图列举出来,具体操作,将在以后的文章中展示。