一个基本的WebGL示例及注释

var canvas = document.getElementById("mycanvas");
// 获取上下文并初始化画布
var gl = canvas.getContext("webgl");
// 定义清除颜色
gl.clearColor(0.0, 0.0, 0.0, 1.0);
// 通过COLOR_BUFFER_BIT把颜色清除为gl.clearColor()定义的颜色
gl.clear(gl.COLOR_BUFFER_BIT);

// 着色器源码
var vertexSource = `
        // 声明一个属性变量 a
        attribute vec3 a;
        void main(){
            // 顶点在作色器处理后的位置信息
            gl_Position = vec4(a, 1.0);
        }    
`;
var fragmentSource = `
        // 精度限定符, 最小精度为float
        precision mediump float;
        void main(){
            // 片段颜色
            gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
        }
`;
// 创建定点和片段着色器
var vertexShader = gl.createShader(gl.VERTEX_SHADER);
var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
// 将着色器源码附加到着色器上
gl.shaderSource(vertexShader, vertexSource);
gl.shaderSource(fragmentShader, fragmentSource);
// 编译着色器
gl.compileShader(vertexShader);
gl.compileShader(fragmentShader);

// 创建一个程序对象
var program = gl.createProgram();
// 将编译好的着色器附加到程序对象上
gl.attachShader(program,vertexShader);
gl.attachShader(program,fragmentShader);
// 链接程序对象
gl.linkProgram(program);
// WebGL引擎使用该程序对象
gl.useProgram(program);


// 创建一个WebGLBuffer缓冲对象
var vertexBuffer = gl.createBuffer();
// 将该缓冲对象绑定为当前的数组缓冲
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
// 缓冲数据
var data = [
     0.0 ,  0.5 ,  0.0,
    -0.5 , -0.5 ,  0.0,
     0.5 , -0.5 ,  0.0
];
// 将缓冲数据添加到当前的数组缓冲中
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(data), gl.STATIC_DRAW);

// 获取着色器源码中属性的引用
var vertexAttribLocation = gl.getAttribLocation(program, "a"); 
// 设置属性a接收gl.ARRAY_BUFFER的数据
gl.vertexAttribPointer(vertexAttribLocation, 3, gl.FLOAT, false, 0, 0);
// 设置通过顶点着色器将缓冲的输入数据转换为一系列顶点数组
gl.enableVertexAttribArray(vertexAttribLocation);
// 绘制缓冲数组
gl.drawArrays(gl.TRIANGLES, 0, 3);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值