之前的文章介绍了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);

可变量

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

webgl 初识2的更多相关文章

  1. webgl 初识1

    1.  webgl是什么?   WebGL其实是一个非常简单的API.好吧,“简单”可能是一个不恰当的描述. 它做的是一件简单的事,它仅仅运行用户提供的两个方法,一个顶点着色器和一个片断着色器, 去绘 ...

  2. webgl helloworld

    之前的webgl 初识1, 初识2 已经介绍了webgl的基本概念,工作原理. 没有理解的自己yy. 现呈上例子一枚 <!DOCTYPE html> <html lang=" ...

  3. WebGL入门教程(一)-初识webgl

    一.WebGL和传统网页的区别: 普通网页组成成分:HTML.JavaScript: WebGL网页组成成分:HTML5.JavaScript和GLSL ES(着色器语言 OpenGL ES): 二. ...

  4. 初识webgl--我的webgl学习第一课(基于threeJs)

    一,我为什么要学习webgl 一个偶然的机会,在和朋友的聊天过程中,听说了webgl,也许过去也看到过,但是没有特别在意过.原来,JavaScript也可以很好的渲染并在网页上显示三维动画,不用借助插 ...

  5. 初识WEBGL

    WEBGL (全写Web Graphics Library)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一 ...

  6. WEBGL学习【一】初识WEBGL

    <html lang="zh-CN"> <head> <title>NeHe's WebGL</title> <meta ch ...

  7. WebGL入门教程(五)-webgl纹理

    前面文章: WebGL入门教程(一)-初识webgl WebGL入门教程(二)-webgl绘制三角形 WebGL入门教程(三)-webgl动画 WebGL入门教程(四)-webgl颜色 这里就需要用到 ...

  8. WebGL入门教程(四)-webgl颜色

    前面文章: WebGL入门教程(一)-初识webgl WebGL入门教程(二)-webgl绘制三角形 WebGL入门教程(三)-webgl动画 颜色效果图: 操作步骤: 1.创建HTML5 canva ...

  9. WebGL入门教程(三)-webgl动画

    前面文章: WebGL入门教程(一)-初识webgl WebGL入门教程(二)-webgl绘制三角形 WebGL动画有移动.旋转和缩放,我们将移动.旋转和缩放图形,然后将其绘制到屏幕上,称为变换(tr ...

随机推荐

  1. C++基本概念复习

    照着https://www.w3cschool.cn/cpp/,把C++的基础概念顺了一遍,虽然很久没用C++,还是整理一下. #include "stdafx.h"; #incl ...

  2. Oracle入门第五天(下)——数据库其他对象

    一.概述 其他数据库对象 主要掌握的为序列 二.序列 1.什么是序列 序列: 可供多个用户用来产生唯一数值的数据库对象 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效 ...

  3. 20155209实验二《Java面向对象程序设计》

    20155209实验二<Java面向对象程序设计> 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计 ...

  4. 20155223 2006-2007-2 《Java程序设计》第一周学习总结

    20155223 2006-2007-2 <Java程序设计>第一周学习总结 学习内容 提问 第三章:Java没有能够计算开根号的运算符,我遇到开根运算该怎么办? 第四章:Java有没有比 ...

  5. 微信小程序标签页切换

    WXML中: <view class="swiper-tab"> <view class="swiper-tab-list {{currentTab== ...

  6. c#获取已安装的所有NET版本

    /// <summary> /// 获取已安装的所有NET版本 /// </summary> /// <returns></returns> publi ...

  7. SupperSocket深入浅出

    这篇文章出要是SuperSocket底层如何接收数据 Process(ArraySegment<byte> segment) 获取加载数据(直到数据全部接收后返回) namespace S ...

  8. day3 直方图

    1.绘制直方图 # coding=utf-8 import cv2 import numpy as np from matplotlib import pyplot as plt img1 = cv2 ...

  9. day8 RHCE

    12 .实现一个 web 服务器在server0上配置一个站点http://server0.example.com,然后执行以下步骤: 从http://classroom.example.com/ma ...

  10. SQL基本数据类型等

    bit   类似C#中的bool类型   true/false int   整型 nvarchar  字符串类型 float   小数型 decimal(,) 小数型  (限制小数位数) dateti ...