WebGL入门教程(四)-webgl颜色
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了WebGL入门教程(四)-webgl颜色,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2240字,纯文字阅读大概需要4分钟。
内容图文
前面文章:
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);
原文:http://www.cnblogs.com/bsman/p/6183110.html
内容总结
以上是互联网集市为您收集整理的WebGL入门教程(四)-webgl颜色全部内容,希望文章能够帮你解决WebGL入门教程(四)-webgl颜色所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。