之前的文章介绍了webgl.

这里进一步精简。

WebGL的全部内容就是创建不同的着色器,

向着色器提供数据然后调用gl.drawArrays 或 gl.drawElements

让WebGL调用当前顶点着色器处理每个顶点,调用当前片断着色器渲染每个像素。

既然着色器需要数据,着色器分两部分,顶点和片段着色器

顶点着色器需要的数据,可以通过以下三种方式获得。

  1. Attributes 属性 (从缓冲中获取的数据)
  2. Uniforms 全局变量 (在一次绘制中对所有顶点保持一致值)
  3. Textures 纹理 (从像素或纹理元素中获取的数据)

片断着色器所需的数据,可以通过以下三种方式获取

  1. Uniforms 全局变量 (values that stay the same for every pixel of a single draw call)
  2. Textures 纹理 (data from pixels/texels)
  3. Varyings 可变量 (data passed from the vertex shader and interpolated)

属性写入

  • var buf = gl.createBuffer();
  • gl.bindBuffer(gl.ARRAY_BUFFER, buf);
  • gl.bufferData(gl.ARRAY_BUFFER, someData, gl.STATIC_DRAW);

属性读取

  • gl.getAttribLocation(positionLoc);(可初始进行)
  • gl.enableVertexAttribArray(positionLoc);
  • gl.bindBuffer(gl.ARRAY_BUFFER, buf);
  • gl.vertexAttribPointer(positionLoc, numComponents, type, false, stride, offset);

变量读写(用的时候,直接给某变量绑定值就好了)

  • var offsetLoc = gl.getUniformLocation(progress, XX);
  • gl.uniform(XXXXXX); // 向右偏移一半屏幕宽度

纹理写入

  • var txt = gl.createTexture();
  • gl.bindTexture(gl.TEXTURE_2D, tex);
  • gl.texImage2D(gl.TEXTURE_2D, level, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, img);

纹理读取

  • gl.getUniformLocation(positionLoc);(可初始化进行)
  • gl.activeTexture(gl.TEXTURE0 + unit);
  • gl.bindTexture(gl.TEXTURE_2D, tex);
  • gl.uniform1i(someSamplerLoc, unit);

可变量

顶点着色器 直接传给 片段着色器

最新文章

  1. 如何让你的网站支持https
  2. 跨平台日志清理工具 Log-Cutter v2.0.1 RC-1 发布
  3. windows下面安装casperjs
  4. SharePoint 2013: Search Architecture in SPC202
  5. jfinal框架教程-学习笔记(二)
  6. C++学习笔记3:一些错误
  7. AspNetPager学习使用2
  8. spring中controller
  9. 推荐几个对Asp.Net开发者比较实用的工具
  10. Animation动画(一)
  11. grails&groovy的IllegalArgument异常
  12. win7安装ruby on rails
  13. 分享一个option样式传递给select当前选中样式
  14. JS操作cookie的实例
  15. Day05_JAVAEE系列:Junit
  16. docker容器时间与宿主机时间不一致问题
  17. MySql cmd下的学习笔记 —— 有关select的操作(max, min等常见函数)
  18. JAVA在Windows使用apache commons-csv导出CSV解决方案
  19. avalon 如何隐藏首屏加载页面时出现的花括号
  20. linux命令(53):用户和用户组

热门文章

  1. Java第五次实验报告
  2. 与虚拟机和linux的初次接触
  3. 20155313 2016-2017-2 《Java程序设计》第三周学习总结
  4. day2 Ubuntu配置源
  5. 无旋treap的简单思想以及模板
  6. linux挂在samba服务器到本地(用于备份文件到nas或者windows的文件服务器)
  7. Jmeter直连postgresql数据库进行压测
  8. 【python 3.6】调用另一个文件的类的方法
  9. rz和sz上传下载文件
  10. Variable() placeholder() constant() 的区别