UNPKG

clay-core

Version:

Provide a more friendly web-side drawing interface!

111 lines (100 loc) 3.44 kB
<!DOCTYPE html> <html lang="zh-cn"> <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"> <link rel="stylesheet" href="../../libs/easycss-1.3.1.min.css"> <link rel="stylesheet" href="../../libs/prettify.css"> <link rel="stylesheet" href="../../doc.css"> <script src="../../libs/prettify.js"></script> </head> <body onload="prettyPrint()"> <header> 绘图对象 </header> <p> 3D绘图采用的是WebGL实现,当然,你使用2D绘图对象,借助投影矩阵等实现也是可以的,不过这不是天然支持的。 </p> <pre class='prettyprint lang-js'>var render3D=$$('canvas').webgl();</pre> <p> Canvas默认就是一个画布,调用webgl方法,表示我们要在上面绘制3D图形,这样就返回了一个3D启动器。 </p> <pre class='prettyprint lang-js'>var gl=render3D.painter();</pre> <p> 3D启动器用于处理许多基础的操作(比如着色器,缓冲区等),而绘制图形的时候,和2D一样,需要获取画笔,就像上面那样。 </p> <p class="warn"> 请记住render3D和gl,并明确他们是干什么的,这对阅读后续文档非常重要! </p> <h2> 一个简单的例子 </h2> <img src="../../images/webgl.png" width='300' alt="彩色三角形"> <p> 绘制一个渐变色的三角形,主要用于说明借助clay.js绘制webgl图形的大致过程。 </p> <h4> 着色器 </h4> <p> 首先,我们需要准备好着色器: </p> <pre class='prettyprint lang-js'>&lt;!-- 顶点着色器 --&gt; &lt;script type='x-shader/x-vertex' id='vs'&gt; attribute vec4 a_position; attribute vec4 a_color; varying vec4 v_color; void main(){ gl_Position=a_position; v_color=a_color; } &lt;/script&gt;</pre> <pre class='prettyprint lang-js'>&lt;!-- 片段着色器 --&gt; &lt;script type='x-shader/x-fragment' id='fs'&gt; precision mediump float; varying vec4 v_color; void main(){ gl_FragColor=v_color; } &lt;/script&gt;</pre> <p> 着色器的语法采用的是GLSL SE语法,着色器在后续会有专门说明。 </p> <h4> 程序代码 </h4> <pre class='prettyprint lang-js'>// 启动3D绘图 var render3D = $$('canvas').webgl(); // 启用着色器 render3D.shader($$('#vs')[0].innerHTML, $$('#fs')[0].innerHTML); // 获取画笔 var gl = render3D.painter(); // 数据 var data = new Float32Array([ // 顶点坐标 色彩 0.0, 0.5, 1.0, 0.0, 0.0, -0.5, -0.5, 0.0, 1.0, 0.0, -0.5, 0.5, 0.0, 0.0, 1.0 ]); render3D // 初始化缓冲区 .buffer() // 数据写入缓冲区 .write(data) // 写入缓冲区的数据分配 .use('a_position', 2, 5, 0) .use('a_color', 3, 5, 2); // 绘制三角形 gl.drawArrays(gl.TRIANGLES, 0, 3);</pre> <h4> 最终效果 </h4> <p> 最终效果如上右图所示,因为我们定义了三角形三个点的颜色都不一样,着色器会自动进行颜色插值,也就是你看见的渐变效果。 </p> <p> 虽然这是一个2D的例子,不过绘制3D的过程也和这差不多,特别是借助clay.js绘制的时候。 </p> </body> </html>