原生webgl学习(五) WebGL绘制矩形(二):更简洁的代码

本文介绍如何在WebGL中以更简洁的方式绘制矩形,通过封装着色器变量、缓冲区和画图函数,降低代码复杂度。提供了一个完整的矩形绘制示例,并预告了下节将讲解使用WebGL写字的技术。
摘要由CSDN通过智能技术生成

本专栏所有文章示例代码均可在我的gitee码云上获取,读者可自行下载:https://gitee.com/babyogl/learnWebGL;本文demo代码在chapter-03下的rectangle-01.html,读者可以自行下载查看;

前面三节笔者分别实现了:用WebGL绘制一个三角形WebGL中的矩阵运算:平移、旋转和缩放 WebGL绘制矩形等几个demo,也许细心的读者会发现代码很凌乱,而且实现一个例子往往需要很多行代码,那有没有更简洁的代码表达方式?当然有,我们可以把复用多次的代码封装起来。

步骤一:

我们将寻找着色器变量的位置和创建的缓冲区作为着色器项目的一个属性,这样做可以方便参数的传递:

 //创建着色器程序
 let program = initShader(gl, vShaderSource, fShaderSource);
 program.pLocation = getAttribute(gl, program, 'a_position');
 program.rLocation = getUniform(gl, program, 'u_resolution');
 program.cLocation = getUniform(gl, program, 'u_color');
 //创建缓冲区
 program.pBuffer = gl.createBuffer();

步骤二:

我们将菜单栏编写为一个函数initGui接受gl和program两个参数,从这里就可以看出步骤1的好处:

 function initGui(gl, program) {
     let gui = new dat.GUI();
     gui.add(guiField, 'x', 0, gl.canvas.width-200).onChange(function(e) {
           translate[0] = e;
           drawScene(gl, program);
     });
     gui.add(guiField, 'y', 0, gl.canvas.height-200).onChange(function(e) {
           translate[1] = e;
           drawScene(gl, program);
     });

     let ui = document.getElementById('ui');
     ui.appendChild(gui.domElement);
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值