• 初识webGL


    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Titletitle>
    6. head>
    7. <body>
    8. <canvas width="300" height="300">canvas>
    9. <script>
    10. let canvas = document.querySelector('canvas');
    11. let gl = canvas.getContext('webgl');
    12. //在 GLSL 中,attribute 表示声明变量,vec2 是变量的类型,它表示一个二维向量,position 是变量名。接下来我们将 buffer 的数据绑定给顶点着色器的 position 变量。
    13. //着色器 顶点和图元构成
    14. const vertex = `
    15. attribute vec2 position;
    16. varying vec3 color;
    17. void main() {
    18. gl_PointSize = 1.0;
    19. color = vec3(0.5 + position * 0.5, 0.0);
    20. gl_Position = vec4(position * 0.5, 1.0, 1.0);
    21. }
    22. `;
    23. //片元
    24. const fragment = `
    25. precision mediump float;
    26. varying vec3 color;
    27. void main(){
    28. gl_FragColor = vec4(color, 1.0);
    29. }
    30. `
    31. //构建片元着色器
    32. //传入顶点 传入图元
    33. //着色器 分为两部分 一个顶点着色器 一个片元着色器
    34. const vertexShader = gl.createShader(gl.VERTEX_SHADER)
    35. gl.shaderSource(vertexShader, vertex);
    36. gl.compileShader(vertexShader)
    37. const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER)
    38. gl.shaderSource(fragmentShader,fragment)
    39. gl.compileShader(fragmentShader)
    40. // 关联着色器
    41. let webGLProgram = gl.createProgram();
    42. gl.attachShader(webGLProgram,vertexShader);
    43. gl.attachShader(webGLProgram, fragmentShader);
    44. gl.linkProgram(webGLProgram)
    45. //使用webGLProgram程序
    46. gl.useProgram(webGLProgram)
    47. //构建顶点数据
    48. //webGL需要使用类型数组定义 默认格式:FloatArray
    49. const points = new Float32Array([
    50. -1,-1,
    51. 0, 1,
    52. 1, -1
    53. ])
    54. //将数据写入缓冲区 createBuffer bindBuffer bufferData
    55. let webGLBuffer = gl.createBuffer();
    56. gl.bindBuffer(gl.ARRAY_BUFFER, webGLBuffer);
    57. //webgl支持的图元类型有七种,分别是 gl.POINTS(点), gl.LINES(线段), gl.LINE_STRIP(线条), gl.LINE_LOOP(回路), gl.TRIANGLES(三角形), gl.TRIANGLE_STRIP(三角带), gl.TRIANGLE_FAN(三角扇)。
    58. //要绘制空心三角形,gl.LINE_STRIP(线条)、gl.LINES(线段)、 gl.LINE_LOOP(回路)都可以实现
    59. gl.bufferData(gl.ARRAY_BUFFER,points,gl.STATIC_DRAW)
    60. //将数据写道cpu
    61. //获取顶点 着色器中的position变量的地址
    62. const vPosition = gl.getAttribLocation(webGLProgram, 'position');
    63. //给变量设置长度和类型
    64. gl.vertexAttribPointer(vPosition, 2, gl.FLOAT, false, 0, 0);
    65. //激活这个变量
    66. gl.enableVertexAttribArray(vPosition);
    67. //最后一步数据绘图
    68. gl.clear(gl.COLOR_BUFFER_BIT);
    69. gl.drawArrays(gl.TRIANGLES, 0, points.length / 2);
    70. script>
    71. body>
    72. html>

  • 相关阅读:
    【Linux】分布式版本控制工具git
    《Go Web 编程》之第7章 Go Web服务
    Android的亮灯逻辑辨析
    vue2.x引入threejs
    Android 集成Flutter模块踩坑之路
    基于ssm的美妆购物平台管理系统(idea+spring+springmvc+mybatis+jsp)
    Ubuntu部署K8S
    React---基础
    Rust多线程编程
    Linux生产者消费者模型
  • 原文地址:https://blog.csdn.net/Jantelope/article/details/126343019