回顾
为了在canvas上绘制二维图形,需经过以下三个步骤
- 获取canvas元素
- 向该元素请求二维图形的绘图上下文
- 在绘图上下文上调用相应的绘图函数,以绘制二维图形
最剪短的WebGL程序:清空绘图区
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<canvas id="webgl" width="400" height="400"></canvas>
</body>
</html>
<script>
const canvas = document.getElementById("webgl");
// 获取webgl绘图上下文
const gl = canvas.getContext("webgl");
//指定一个覆盖(清空)canvas的颜色
gl.clearColor(0.0,0.0,0.0,1.0);
//执行清空
gl.clear(gl.COLOR_BUFFER_BIT);
</script>
它会遵循绘制二维图形的三个步骤: 获取canvas元素, 获取绘图上下文,开始绘图。
刚才我们共做了四步操作:
1.首先从文件中获取了canvas元素
2.为webgl获取绘图上下文,通常来说,我们应该使用canvas.getContext()来获取绘图上下文,但是在获取webgl上下文时,canvas.getContext()在不同的浏览器中会不同,可使用”experimental-webgl”和”webgl”,未来将变为”webgl”。 现在这个绘图环境对象就可以绘制三维图形了。
3.进行绘图操作。清空绘图之前我们需要指定背景颜色。使用gl.clearColor()以RGBA格式设置背景色。由于webgl是继承自opengl的,所以它遵循传统的opengl颜色分量的取值范围,从0.0到1.0。
4.清空canvas,最后可以调用gl.clear()函数,用之前指定的背景色进行清空。gl.clear(gl.COLOR_BUFFER_BIT)
webGL中的gl.clear()方法继承自opengl, 它基于多基本缓冲区模型,比二维绘图上下文复杂的多。清空绘图区实际上是清空颜色缓冲区。传递的参数其实就是告诉webgl清空颜色缓冲区。
gl.clearColor(red,green,blue,alpha)
参数 | |
---|---|
red | 指定红色值(从0.0到1.0) |
green | 指定绿色值(从0.0到1.0) |
blue | 指定蓝色值(从0.0到1.0) |
alpha | 指定透明度值(从0.0到1.0) |
如果任何值小于0.0或者大于1.0,则被截断为0.0或1.0 |
gl.clear(buffer)
指定缓冲区设定为预定的值。如果清空的是颜色缓冲区,那么将使用gl.clearColor()指定的值
参数 | |
---|---|
buffer | 指定待清空的缓冲区,位操作符可用来指定多可缓冲区 |
gl.COLOR_BUFFER_BIT | 指定颜色缓存 |
gl.DEPTH_BUFFER_BIT | 指定深度缓冲区 |
gl.STENCIL_BUFFER_BIT | 指定模板缓冲区 |
为了方便后续使用,将引入三个工具函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<canvas id="webgl" width="400" height="400"></canvas>
</body>
</html>
<script src="../lib/webgl-util.js" ></script>
<script src="../lib/webgl-debug.js" ></script>
<script src="../lib/cuon-utils.js" ></script>
<script>
const canvas = document.getElementById("webgl");
const gl = getWebGLContext(canvas);
// // 获取webgl绘图上下文
// const gl = canvas.getContext("webgl");
// //指定一个覆盖(清空)canvas的颜色
gl.clearColor(0.0,0.0,0.0,1.0);
//执行清空
gl.clear(gl.COLOR_BUFFER_BIT);
</script>
将在后续文章中解释工具函数的内容,目前只用到获取上下文函数,用来做兼容处理
绘制一个点
在之前学习了如何建立一个webgl程序,如何使用一些简单的webgl相关函数。那后续,将进一步在一个示例程序中绘制一个最简单的图形。一个点。