经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 软件/图像 » WebGL » 查看文章
WebGl 利用drawArrays、drawElements画三角形
来源:cnblogs  作者:&执念  时间:2019/4/1 9:06:41  对本文有异议

效果:

 

代码:

 

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>WebGl 利用drawArrays、drawElements画三角形</title>
  6. </head>
  7. <body>
  8.  
  9. <canvas id="myCanvas" width="500" height="300" style="border: 1px solid red"></canvas>
  10.  
  11. </body>
  12. <script>
  13. window.onload = function () {
  14. //第1步 - 准备Canvas和获取WebGL的渲染上下文
  15. var canvas = document.getElementById('myCanvas'),
  16. gl = canvas.getContext('webgl');
  17. //第2步 - 定义几何并将其存储在缓冲区对象
  18. var vertices = [
  19. -0.5,0.5,0.0,
  20. 0.0,0.5,0.0,
  21. -0.25,0.25,0.0,
  22. 0.5,0.5,0.0,
  23. 0.25,0.25,0.0,
  24. ],
  25. indices =[0,1,2,1,3,4];
  26. var vertex_buffer = gl.createBuffer();
  27. gl.bindBuffer(gl.ARRAY_BUFFER,vertex_buffer);
  28. gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(vertices),gl.STATIC_DRAW);
  29. var Index_Buffer = gl.createBuffer();
  30. gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, Index_Buffer);
  31. gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
  32. //第3步 - 创建和编译着色器程序
  33. var vertCode =
  34. 'attribute vec3 coordinates;' +
  35. 'void main(void) {' +
  36. ' gl_Position = vec4(coordinates, 1.0);' +
  37. '}';
  38. var fragCode = 'void main(void) {' +
  39. ' gl_FragColor = vec4(1, 0.5, 0.0, 1);' +
  40. '}';
  41. var vertShader = gl.createShader(gl.VERTEX_SHADER);
  42. var fragShader = gl.createShader(gl.FRAGMENT_SHADER);
  43. gl.shaderSource(vertShader,vertCode);
  44. gl.shaderSource(fragShader,fragCode);
  45. gl.compileShader(vertShader);
  46. gl.compileShader(fragShader);
  47. var shaderProgram = gl.createProgram();
  48. gl.attachShader(shaderProgram,vertShader);
  49. gl.attachShader(shaderProgram,fragShader);
  50. gl.linkProgram(shaderProgram);
  51. gl.useProgram(shaderProgram);
  52. //第4步 - 关联着色器程序到缓冲区对象
  53. var coord = gl.getAttribLocation(shaderProgram,'coordinates');
  54. gl.vertexAttribPointer(coord,3,gl.FLOAT,false,0,0);
  55. gl.enableVertexAttribArray(coord);
  56. //第5步 - 绘制所需的对象
  57. gl.clearColor(0.5, 0.5, 0.5, 0.9);
  58. gl.enable(gl.DEPTH_TEST);
  59. gl.clear(gl.COLOR_BUFFER_BIT);
  60. gl.viewport(0,0,myCanvas.width,myCanvas.height);
  61. //gl.drawArrays(gl.TRIANGLES, 0, 3)//画简单的三角形 此方法不需要索引
  62. //gl.drawArrays(gl.TRIANGLES, 0, 6)//如果下需要画两个三角形 那么vertices数组中需要增加一个点
  63. gl.drawElements(gl.TRIANGLES, indices.length, gl.UNSIGNED_SHORT,0);//利用drawElements画三角形
  64. //画矩形 更改indices即可
  65.  
  66.  
  67. //绘图模式如下:
  68. //gl.POINTS:要绘制一系列的点
  69. //gl.LINES:要绘制了一系列未连接直线段(单独行)
  70. //gl.LINE_STRIP:要绘制一系列连接的线段
  71. //gl.LINE_LOOP:要绘制一系列连接的线段。它还连接的第一和最后的顶点,以形成一个环
  72. //TRIANGLES:一系列单独的三角形;绘制方式:(v0,v1,v2),(v1,v3,v4)
  73. //TRIANGLE_STRIP:一系列带状的三角形
  74. //TRIANGLE_FAN:扇形绘制方式
  75. }
  76. </script>
  77. </html>

 

原文链接:http://www.cnblogs.com/zhinian-/p/10631438.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号