• WebGl 多缓冲区传递颜色和坐标(矩形)


    效果:

    代码:

      1 <!DOCTYPE html>
      2 <html lang="en">
      3 <head>
      4     <meta charset="UTF-8">
      5     <title>WebGl  多缓冲区传递颜色和坐标(矩形)</title>
      6 </head>
      7 <body>
      8 
      9 <canvas id="myCanvas" width="500" height="300" style='border:1px solid red'></canvas>
     10 
     11 </body>
     12 
     13 <script>
     14 
     15     window.onload = function () {
     16 
     17         //获取上下文
     18         var canvas = document.getElementById('myCanvas');
     19         var gl = canvas.getContext('webgl');
     20 
     21         //定义矩形数据 并 将其储存在缓存对象
     22         var vertices = [
     23             -0.5,0.5,0.0,
     24             -0.5,-0.5,0.0,
     25             0.5,-0.5,0.0,
     26             0.5,0.5,0.0
     27         ];
     28         var colors = [
     29             0,0,1,
     30             1,0,0,
     31             0,1,0,
     32             1,0,1,
     33         ];
     34         var indices = [3,2,1,3,1,0];
     35 
     36         var vertex_buffer = gl.createBuffer();
     37         gl.bindBuffer(gl.ARRAY_BUFFER,vertex_buffer);
     38         gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
     39 
     40         var Index_Buffer = gl.createBuffer();
     41         gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,Index_Buffer);//注意  是  ELEMENT_ARRAY_BUFFER  不是  ARRAY_BUFFER
     42         gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
     43 
     44         var color_buffer = gl.createBuffer ();
     45         gl.bindBuffer(gl.ARRAY_BUFFER,color_buffer);
     46         gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW);
     47 
     48         //创建和编译着色器程序
     49         var vertCode = 'attribute vec3 coordinates;'+
     50             'attribute vec3 color;'+
     51             'varying vec3 vColor;'+
     52 
     53             'void main(void) {' +
     54             ' gl_Position = vec4(coordinates, 1.0);' +
     55             'vColor = color;'+
     56             '}';
     57         var fragCode = 'precision mediump float;'+
     58             'varying vec3 vColor;'+
     59             'void main(void) {'+
     60             'gl_FragColor = vec4(vColor, 1.0);'+
     61             '}';
     62 
     63         var vertShader = gl.createShader(gl.VERTEX_SHADER);
     64         gl.shaderSource(vertShader, vertCode);
     65         gl.compileShader(vertShader);
     66 
     67         var fragShader = gl.createShader(gl.FRAGMENT_SHADER);
     68         gl.shaderSource(fragShader, fragCode);
     69         gl.compileShader(fragShader);
     70 
     71         var shaderProgram = gl.createProgram();
     72         gl.attachShader(shaderProgram, vertShader);
     73         gl.attachShader(shaderProgram, fragShader);
     74         gl.linkProgram(shaderProgram);
     75         gl.useProgram(shaderProgram);
     76 
     77 
     78         //与缓冲区对象相关联着色器程序
     79         gl.bindBuffer(gl.ARRAY_BUFFER,vertex_buffer);//这里要注意的是  现在存在多个缓冲区  取属性值得时候  一定先告诉从哪个缓冲区取值  否则默认是最后一个bindBuffer()指定的;
     80         var coord = gl.getAttribLocation(shaderProgram, "coordinates");
     81         gl.vertexAttribPointer(coord, 3, gl.FLOAT, false, 0, 0);
     82         gl.enableVertexAttribArray(coord);
     83 
     84         gl.bindBuffer(gl.ARRAY_BUFFER,color_buffer);//这里要注意的是  现在存在多个缓冲区  取属性值得时候  一定先告诉从哪个缓冲区取值  否则默认是最后一个bindBuffer()指定的;
     85         var color = gl.getAttribLocation(shaderProgram, "color");
     86         gl.vertexAttribPointer(color, 3, gl.FLOAT, false,0,0) ;
     87         gl.enableVertexAttribArray(color);
     88 
     89 
     90         //绘制所需的对象
     91         gl.clearColor(0.5, 0.5, 0.5, 0.9);
     92         gl.enable(gl.DEPTH_TEST);
     93         gl.clear(gl.COLOR_BUFFER_BIT);
     94         gl.viewport(0,0,canvas.width,canvas.height);
     95         gl.drawElements(gl.TRIANGLES, indices.length, gl.UNSIGNED_SHORT,0);
     96 
     97     }
     98 
     99 </script>
    100 
    101 </html>
  • 相关阅读:
    centos7下安装docker(2镜像)
    Centos7下安装docker(1)
    分享一个连接,升级内核
    zabbix图形乱码问题解决办法
    六十四:JavaScript之JavaScript的Math对象常用的方法
    六十三:JavaScript之JavaScript的String对象常用的方法
    六十二:JavaScript之JavaScript数组对象和常用的方法
    六十一:JavaScript之JavaScript函数
    六十:JavaScript之JavaScript流程控制语句
    五十九:JavaScript之JavaScript操作符
  • 原文地址:https://www.cnblogs.com/zhinian-/p/10631478.html
Copyright © 2020-2023  润新知