WebGL入门
Canvas是什么?
canvas标签定义了网页上的绘画区域
canvas标签的引用就像这样:
1 | <canvas id="example" width="500" height="500"> |
使用canvas绘制矩形
HTML
1 |
|
JavaScript
1 | // DrawRecrangle.js |
步骤分解
步骤1 获取canvas元素
1 | var canvas = document.getElementById('example'); |
步骤2 向该元素请求二维/三维图形的“绘图上下文”
1 | var ctx = canvas.getContext('2d'); |
上下文 context
getContext() 的参数用于指定上下文类型,
有两种类型:
- 二维
- 三维
步骤3 在绘图上下文调用相应绘图函数
1 | ctx.fillStyle = 'rgba(0,0,255,1.0)'; |
canvas的坐标系统
- x轴 坐标系横轴,正方向朝→
- y轴 坐标系纵轴,正方向朝↓
- 原点 落在左上方
fillRect的参数
- param1 矩形左上顶点x坐标
- param2 矩形左上顶点y坐标
- param3 矩形宽度
- param4 矩形高度
最短的WebGL程序:清空绘图区
HelloCanvas code
1 | <body onload="main()"> |
1 | function main() { |
步骤分解
1. 获取canvas元素
1 | let canvas = document.getElementById('webgl'); |
2. 获取WebGL绘图上下文
getContext 和 getWebGLContext
getContext
接收的参数(’2d’/‘3d’’)在不同的浏览器中不同。
1 | let gl = canvas.getContext('2d'); |
getWebGLContext
在引入的cuon-utils.js中,
用于隐藏不同浏览器之间的差异。
1 | let gl = getWebGLContext(canvas); |
上下文命名技巧
之所以有人习惯将绘图上下文命名为gl,
是因为 WebGL 是基于 OpenGL ES 的,
这样可以将两者的函数名对应起来,比如:
gl.clearColor() 与 glClearColor()
3. 设置背景色
1 | gl.clearColor(0.0, 0.0, 0.0, 1.0); |
颜色分量取值继承自OpenGL,因此范围在0.0-1.0,RGB颜色越高就越亮。
4. 清空canvas
1 | gl.clear(gl.COLOR_BUFFER_BIT); |
BUFFER
由于clear继承自OpenGL,基于多基本缓冲区模型,比二维绘图上下文要复杂。
清空绘图区域,实际上是清空颜色缓冲区(color buffer)。
也可以通过下面方法清空对应缓冲区: