zoukankan      html  css  js  c++  java
  • webgl 初识2

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

    可变量

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

      

  • 相关阅读:
    Java/IO流
    Java实现IO通信(服务器篇)
    利用哈夫曼二叉树实现文件的压缩
    关于字符串构建,连接,查找
    线程小球
    准备造一个轮子,关于图片浏览器的
    IOS之循环引用
    ARC
    构造方法与快速创建对象
    autorelease
  • 原文地址:https://www.cnblogs.com/honghong87/p/8954603.html
Copyright © 2011-2022 走看看