通常我们将 CANVAS 与 webGL 区分开 , 移动端和WEB端区分开
类似于这种关系:
// 通过getElementById()方法获取canvas画布 var c2dx=document.getElementById('c2dx'); // 通过方法getContext()获取2d上下文 var c=c2dx.getContext('2d'); c.moveTo(0,0); //直线起点坐标 c.lineTo(50,50); //直线第2个点坐标 c.lineTo(0,100); //直线第3个点坐标 c.stroke(); //把点连成直线绘制出来 //-------------------------------------------------------------------- // 通过getElementById()方法获取canvas画布 var wglx=document.getElementById('webglxxx'); // 通过方法getContext()获取WebGL上下文 var gl=wglx.getContext('webgl'); console.log(gl);
let [canvas, webgl, opengl] = [‘2d’, ‘web端’, '移动端']
因为 webgl 通常用GPU的库来处理3D和加速, 所以定义会稍显专业, 但总共分四步骤:
点、线面 、 着色 、绘制。
1、let 3d基础 = ['顶点位置', '面颜色定义']
2、初始化着色器 , 主要是创建点,创建面, 再引入点和面计算光源阴影,编译并渲染出来
3、创建场景并把 渲染的物体 关联到 具体场景,返回整体参数。
4、调用绘制方法进行绘制。
WebGL API
WebGL API指的就是gl=canvas.getContext('webgl')
返回对象gl
的一系列绘制渲染方法, GPU相比CPU最大的特点是并行计算,不过WebGL API都 进行了封装,如果你想学习并行计算可以关注CUDA或OpenCL。
<!-- 顶点着色器源码 --> <script id="vertexShader" type="x-shader/x-vertex"> void main() { //给内置变量gl_PointSize赋值像素大小 gl_PointSize=20.0; //顶点位置,位于坐标原点 gl_Position =vec4(0.0,0.0,0.0,1.0); } </script> <!-- 片元着色器源码 --> <script id="fragmentShader" type="x-shader/x-fragment"> void main() { gl_FragColor = vec4(1.0,0.0,0.0,1.0); } </script>
把代码放在script 标签中独立开来也是可行的。
//顶点着色器源码 var vertexShaderSource = document.getElementById('vertexShader').innerText; //片元着色器源码 var fragShaderSource = document.getElementById('fragmentShader').innerText; //初始化着色器 var program = initShader(gl,vertexShaderSource,fragShaderSource);
支持的数据类型
参阅: https://www.khronos.org/registry/OpenGL/specs/es/2.0/GLSL_ES_Specification_1.00.pdf