WebGL的shader(着色器)有2种:vertexShader(定点着色器)和 fragmentShader(片段着色器)

顶点着色器:定义点的位置、大小
片元着色器:定义画出来的物体的材质(颜色、反光度等...)

着色器定义有自己的一套语言:GLSL(Graphics Library Shading Language)

推荐阅读:https://blog.csdn.net/qq_37338983/article/details/78556063http://www.alloyteam.com/2017/03/teach-you-to-use-webgl-to-quickly-create-a-small-world/

例如用WebGL画一个点:

<head>
<!-- 顶点着色器 定义代码 -->
<script type='x-shader/x-vertex' id='shader-vs'>
void main(){
gl_Position=vec4(100,0.0,0.0,1000);
gl_PointSize=10.0;
}
</script>
<!-- 片元着色器 定义代码 -->
<script type='x-shader/x-fragment' id='shader-fs'>
void main(){
gl_FragColor=vec4(0.0,0.0,1.0,1.0);
}
</script>
</head> <body>
<canvas id='webgl' width='400' height='400'></canvas>
</body>
<script> // 获取webgl的上下文
var canvas = document.getElementById('webgl');
var gl = canvas.getContext('webgl'); // 设置清空颜色
gl.clearColor(0, 1, 1, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT); // 初始化着色器(定点着色器和片段着色器)
// 顶点着色器:就是定义点的位置、大小
// 片元着色器:定义画出来的物体的材质(颜色、反光度等...)
var vs_source = document.getElementById('shader-vs').innerHTML,
fs_source = document.getElementById('shader-fs').innerHTML; // 创建顶点着色器对象
var vertexShader = gl.createShader(gl.VERTEX_SHADER);
// 给顶点着色器对象绑定定义代码
gl.shaderSource(vertexShader, vs_source);
// 编顶点译着色器对象
gl.compileShader(vertexShader); // 创建片元着色器对象
var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
// 给片元着色器对象绑定定义代码
gl.shaderSource(fragmentShader, fs_source);
// 编译片元着色器对象
gl.compileShader(fragmentShader); // 创建一个着色器程序
var glProgram = gl.createProgram(); // 把前面创建的二个着色器对象添加到着色器程序中(顶点和片段着色器都需要)
gl.attachShader(glProgram, vertexShader);
gl.attachShader(glProgram, fragmentShader); // 把着色器程序链接成一个完整的程序
gl.linkProgram(glProgram); // 使用这个完整的程序
gl.useProgram(glProgram); // 绘制一个点
gl.drawArrays(gl.POINTS, 0, 1);
</script> </html>

最新文章

  1. 双层路由设置,WAN口和LAN口连接的方法设置
  2. (转抄:人人都是产品经理——iamsujie)如何提高产品规划PPT的能力
  3. ssm整合
  4. 【leetcode】Single Number &amp;&amp; Single Number II(ORZ 位运算)
  5. Node.js GET/POST请求
  6. js日期时间函数
  7. 转: seajs手册与文档之 -- 模块标识
  8. vsftpd安装和使用 Linux系统和window系统
  9. bug生命周期&amp;bug跟踪处理
  10. 关于 IIS 的 Management Service Delegation 配置 备份
  11. 新的 Centos 服务器初始化配置
  12. 10张图带你深入理解Docker容器和镜像
  13. DHCP Server (推荐使用Windows)
  14. Django + Uwsgi +Nginx生产环境部署
  15. 011-ThreadFactory线程工厂
  16. git介绍和常用命令总结
  17. 【AUTO Uninstaller 中文版-详细使用教程】AUTODESK系列软件MAYA/CAD/3DSMAX/INVENTOR终极完美修复卸载工具 Windows x64位 【原创搬家】
  18. MongoDB安全:创建第1个、第2个、第3个用户
  19. C/C++中内联(inline)函数的优点和缺点
  20. kali下更新软件时,总是报错,说下列签名无效 解决办法

热门文章

  1. 通俗化理解Spring3 IoC的原理和主要组件
  2. Angularjs 省市区级联
  3. Uwl.Admin开源框架(一)
  4. Bat 批处理启动和停止Oracle 服务
  5. MySql翻页查询
  6. ArrayList和CopyOnWriteArrayList(转载)
  7. MySQL5.7.28免安装版配置
  8. Delphi 安装apk
  9. PAT Basic 1070 结绳 (25 分)
  10. Tomcat 启动闪退解决