美文网首页
WebGL-给顶点着色

WebGL-给顶点着色

作者: 写前端的大叔 | 来源:发表于2020-01-18 22:29 被阅读0次

上一篇文章介绍的是绘制一个正方形,片段着色器设置的颜色为正方形,所以整个正方形颜色都是红色的,顶点也默认为红色,这一篇就来介绍下怎么给顶点设置不同的颜色。在WebGL中,每一个顶点都有颜色和位置信息,在初始化WebGL缓冲区的时候,可以设置顶点的颜色,比如要给每个顶点设置为不同的顔色,分別为红,黄,绿,白,以此渲染一个渐变的色彩,需要指定一个颜色的数组给缓冲区,如下所示:

//创建缓冲器来存储顶点
  initBuffers(gl) {
    //创建缓冲器
    const positionBuffer = gl.createBuffer();
    //绑定上下文。
    gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);

    const positions = [
      1.0, 1.0,
      -1.0, 1.0,
      1.0, -1.0,
      -1.0, -1.0,
    ];

    gl.bindBuffer(WebGLRenderingContext.ARRAY_BUFFER, positionBuffer);
    gl.bufferData(WebGLRenderingContext.ARRAY_BUFFER,
      new Float32Array(positions),
      WebGLRenderingContext.STATIC_DRAW
    );

    var colors = [
      0.0,  0.0,  1.0,  1.0,
      0.0,  0.0,  1.0,  1.0,
      0.0,  0.0,  1.0,  1.0,
      0.0,  0.0,  1.0,  1.0,    
    ];

    const colorBuffer = gl.createBuffer();
    gl.bindBuffer(WebGLRenderingContext.ARRAY_BUFFER, colorBuffer);
    gl.bufferData(WebGLRenderingContext.ARRAY_BUFFER, 
      new Float32Array(colors),
      WebGLRenderingContext.STATIC_DRAW
    );

    return {
      position: positionBuffer,
      color: colorBuffer,
    };
  }

这段代码首先建立了一个JavaScript的数组,此数组中包含四组四值向量,每一组向量代表一个顶点的颜色。然后,创建一个WebGL缓冲区用来存储这些颜色——将数组中的值转换成WebGL所规定的浮点型后,存储在该缓冲区中。为了实际使用这些颜色,需要修改顶点着色器,使得着色器可以从颜色缓冲区中正确取出颜色:

//顶点着色器
    const vsSource = `
      attribute vec4 aVertexPosition;
      attribute vec4 aVertexColor;
      uniform mat4 uModelViewMatrix;
      uniform mat4 uProjectionMatrix;
      varying lowp vec4 vColor;
      void main(void) {
        gl_Position = uProjectionMatrix * uModelViewMatrix * aVertexPosition;
        vColor = aVertexColor;
      }
  `;

//片段着色器
    const fsSource = `
      varying lowp vec4 vColor;
      void main(void) {
        gl_FragColor = vColor;
      }

然后再修改programInfo中修改初始化颜色的方法。

const programInfo = {
        program: shaderProgram,
        attribLocations: {
            vertexPosition: gl.getAttribLocation(shaderProgram, 'aVertexPosition'),
            vertexColor: gl.getAttribLocation(shaderProgram, 'aVertexColor'),//新增的
        },
        uniformLocations: {
            projectionMatrix: gl.getUniformLocation(shaderProgram, 'uProjectionMatrix'),
            modelViewMatrix: gl.getUniformLocation(shaderProgram, 'uModelViewMatrix'),
        },
    };

然后,我们便可以修改 drawScene() 使之在绘制正方形时使用这些颜色:

  gl.bindBuffer(gl.ARRAY_BUFFER, squareVerticesColorBuffer);
  gl.vertexAttribPointer(vertexColorAttribute, 4, gl.FLOAT, false, 0, 0);

个人博客

相关文章

  • WebGL-给顶点着色

    上一篇文章介绍的是绘制一个正方形,片段着色器设置的颜色为正方形,所以整个正方形颜色都是红色的,顶点也默认为红色,这...

  • OpenGL ES手册翻译---2.OpenGL ES操作(三)

    2.10 顶点着色器 顶点着色器处理通过DrawArrays和DrawElements指定的顶点。每个被顶点着色器...

  • OpenGL ES -顶点着色器

    顶点着色器输入包括: 着色器程序 - 描述顶点上执行操作的顶点着色器源代码和可执行文件 顶点着色器输入 - 顶点数...

  • WebGL编程指南入门基础篇

    WebGL编程指南入门基础篇 着色器介绍 着色器分为顶点着色器 跟 片元着色器 顶点着色器描述顶点特性,包括位置,...

  • QML Book 第九章 着色器渲染 2

    9.5 顶点着色器 顶点着色器可用于操纵着色器效果提供的顶点。在正常情况下,着色效果有 4 个顶点(左上角 top...

  • 七:GLSL灰度,翻转,马赛克滤镜

    默认 顶点着色器代码: 片元着色器代码: 灰度滤镜 顶点着色器代码不变,片元着色器代码: 颠倒滤镜 顶点着色器代码...

  • OpenGL ES 着色器语言GLSL

    在OpenGL ES中着色器分为顶点着色器和片元着色器。顶点着色器是针对每个顶点执行一次,用于确定顶点的位置。片元...

  • OpenGL ES纹理翻转方法

    1.顶点取反1 顶点着色器 片元着色器 2.顶点取反2 顶点着色器 rotateMatrix Z轴旋转矩阵 片元着...

  • webgl 着色器

    GUI 渲染能够让我们看到界面,主要是靠着色器进行渲染的.着色器一般分为顶点着色器,片元着色器. 顶点着色器顶点着...

  • OpenGL ES 渲染流程

    OpenGL ES 渲染流程 1、总体流程 2、流程细节 2.1、顶点着色器 顶点着色器的输入着色器程序:描述顶点...

网友评论

      本文标题:WebGL-给顶点着色

      本文链接:https://www.haomeiwen.com/subject/xdjlzctx.html