前言
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) // 绘制三角形 // 最少需要三个点同样,对于一些固定的流程,我们可以封装函数,这个对于封装,小遍这篇文章先将流程图列举出来,具体操作,将在以后的文章中展示。