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

发布时间:2016-12-31 7:37:33编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"WebGL入门教程(四)-webgl颜色 ",主要涉及到WebGL入门教程(四)-webgl颜色 方面的内容,对于WebGL入门教程(四)-webgl颜色 感兴趣的同学可以参考一下。

WebGL入门教程(二)-webgl绘制三角形

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

颜色效果图:

操作步骤:

  1.创建HTML5 canvas

  2.获取画布 canvas 的 ID

  3.获取WebGL

  4.编译着色器

  5.使用缓冲区对象向顶点传入多个顶点数据

  6.绘制图像

以上1~3参考:http://www.cnblogs.com/bsman/p/6128447.html

4.编译着色器

改顶点着色器,片着色器

//顶点着色器程序    var VSHADER_SOURCE =        "attribute vec4 a_Position;" +        "attribute vec4 a_Color;" +        "varying vec4 v_Color;" +        "void main(){" +        "gl_Position = a_Position;" +        "v_Color = a_Color;" +         "}";    //片元着色器    var FSHADER_SOURCE =        "precision mediump float;" +        "varying vec4 v_Color;" +         "void main() {" +         "gl_FragColor = v_Color;" +         "}";

解释:定义修改颜色的变量 varying,其中"v_Color = a_Color;" 表示将颜色数据传给片元着色器;"gl_FragColor = v_Color;"表示从顶点着色器接收数据;

 5.使用缓冲区对象向顶点传入多个顶点数据

function initBuffers(gl,shaderProgram) {  //顶点坐标和颜色    var vertices = new Float32Array([        0.0, 0.5, 1.0, 0.0, 0.0,       -0.5, -0.5, 0.0, 1.0, 0.0,        0.5, -0.5, 0.0, 0.0, 1.0,    ]);    var n = 3;//点的个数    //创建缓冲区对象    var vertexBuffer = gl.createBuffer();    //将缓冲区对象绑定到目标    gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);    //向缓冲区写入数据    gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);    //获取单个字节    var FSIZE = vertices.BYTES_PER_ELEMENT;    //获取坐标点    var a_Position = gl.getAttribLocation(shaderProgram, 'a_Position');    //将缓冲区对象分配给a_Position变量    gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, FSIZE*5, 0);    //连接a_Position变量与分配给它的缓冲区对象    gl.enableVertexAttribArray(a_Position);    //获取Color坐标点    var a_Color = gl.getAttribLocation(shaderProgram, 'a_Color');    //将缓冲区对象分配给a_Position变量    gl.vertexAttribPointer(a_Color, 3, gl.FLOAT, false, FSIZE*5, FSIZE*2);    //连接a_Position变量与分配给它的缓冲区对象    gl.enableVertexAttribArray(a_Color);    return n;}

其中 vertexAttribPointer 方法注意此时数组中有多种数据,有坐标和颜色,此时就应该修改第五个(跨度)和第六个参数(位移)的值

第一个参数:指定待分配attribute变量的存储位置

第二个参数:指定缓存区中每个顶点的分量个数(1~4)

第三个参数:类型有,gl.UNSIGNED_BYTE无符号字节,gl.SHORT短整数,gl.UNSIGNED_SHORT无符号短整数,gl.INT整型,gl.UNSIGNED_INT无符号整型,gl.FLOAT浮点型。

第四个参数:表示是否将非浮点型的数据归到[0,1][-1,1]区间

第五个参数:相邻两个顶点的字节数。默认为0

第六个参数:表示缓存区对象的偏移量(以字节为单位),就是attribute变量从缓冲区中的何处开始存储。

6.绘制图像

 var n = initBuffers(gl,shaderProgram);    if(n<0){        console.log('Failed to set the positions');        return;    }    // 清除指定<画布>的颜色    gl.clearColor(0.0, 0.0, 0.0, 1.0);    // 清空 <canvas>    gl.clear(gl.COLOR_BUFFER_BIT);    gl.drawArrays(gl.TRIANGLES, 0, n);


上一篇:Atitit 教育与培训学校 的计划策划 v4 qc18
下一篇:[RxJS] Split an RxJS observable conditionally with windowToggle

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款