关于WebGL概述性等相关的问题可以参考我这篇文章:计算机图形学中的ThreeJS - 知乎 (zhihu.com)
知识点一:清空绘图区
<div id="webgl"></div>
var canvas = document.getElementById('webgl');
if ( !canvas ) {
console.error('No WebGL!');
return;
}
var webgl = canvas.getContext('webgl'); //获取上下文
webgl.clearColor(0, 0, 1, 0.5); //清空cavans的颜色,参数为下面准备
webgl.clear(webgl.COLOR_BUFFER_BIT); //用之前指定的背景色清空canvas(背景色填充)
知识点二:绘制一个点
// 顶点着色器程序
var VSHADER_SOURCE = `void main() {
gl_Position = vec4(0.5, 0.5, 0, 1); // 设置定位坐标
gl_PointSize = 10.0; // 顶点大小
}`;
// 片元着色器程序
var FSHADER_SOURCE = `void main() {
gl_FragColor = vec4(1, 0, 0, 1); // 设置片元颜色
}`;
var canvas = document.getElementById('webgl');
var webgl = canvas.getContext('webgl');
//初始化着色器
var program = initShaders( webgl, VSHADER_SOURCE, FSHADER_SOURCE) // 需要引入initShaders.js
webgl.clearColor(0, 0, 1, 0.2);
webgl.clear(webgl.COLOR_BUFFER_BIT);
webgl.drawArrays(webgl.POINTS, 0, 1); // 绘制一个点
最后单独说一下webgl渲染的核心函数:drawArrays(type, start, end)
要知道Draw Call是CPU调用图形编程接口,WebGL具体的实现函数是drawArrays等,用来命令GPU进行渲染的操作。执行过程如下:
- 第一步:CPU会把所需的所有数据准备好
- 第二步:GPU会创建一系列buffer
- 第三步”:通过drawArrays方法,将数据传输到显存中,然后再进行每一帧的渲染
着色器Shader相关知识请参考我的这篇文章WebGL之ThreeJS的shader整理 - 掘金 (juejin.cn)
GLSL ES 着色器语言请参考郭隆邦的技术博客WebGL电子书《WebGL零基础入门教程》_郭隆邦 (yanhuangxueyuan.com)
WebGL的坐标系统 请参考我这篇文章:终于理清楚啦——三维坐标转换过程 - 掘金 (juejin.cn)