• webGL编程指南 第五章 MultiAttributeSize


    我会持续更新关于wegl的编程指南中的代码。

    当前的代码不会使用书中的缩写,每一步都是会展开写。希望能给后来学习的一些帮助

    git代码地址 :git

    本章节中我我们学习使用buffer传递数据

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Documenttitle>
    8. head>
    9. <body>
    10. <canvas id='canvas'>canvas>
    11. <script>
    12. let canvas = document.getElementById('canvas');
    13. let gl = canvas.getContext('webgl');
    14. //顶点着色器
    15. let vertexShaderSource = `
    16. attribute vec2 a_Position;
    17. attribute float a_PointSize;
    18. void main(){
    19. gl_Position = vec4(a_Position,0.0,1.0) ;
    20. gl_PointSize = a_PointSize;
    21. }
    22. `
    23. //片元着色器
    24. let fragmentShaderSouce = `
    25. precision mediump float;
    26. void main(){
    27. gl_FragColor = vec4(1.0,0.0,0.0,1.0);
    28. }
    29. `
    30. // 创建顶点着色器
    31. let vertexShader = gl.createShader(gl.VERTEX_SHADER);
    32. gl.shaderSource(vertexShader, vertexShaderSource)
    33. gl.compileShader(vertexShader)
    34. //创建片元着色器
    35. let fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
    36. gl.shaderSource(fragmentShader, fragmentShaderSouce)
    37. gl.compileShader(fragmentShader)
    38. //创建渲染程序
    39. let program = gl.createProgram();
    40. gl.attachShader(program, vertexShader);
    41. gl.attachShader(program, fragmentShader);
    42. gl.linkProgram(program);
    43. //使用当前渲染程序
    44. gl.useProgram(program)
    45. //检查片元着色器的是否正确
    46. if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
    47. throw gl.getProgramInfoLog(program);
    48. }
    49. //三角形的坐标
    50. let positonArray = new Float32Array([
    51. 0.5, 0.5,
    52. -0.5, -0.5,
    53. 0.5, -0.5,
    54. -0.5, 0.5])
    55. //每个坐标点但的大小
    56. let sizeArray = new Float32Array([10.0, 20.0, 30.0,40.0])
    57. //位置坐标变量
    58. let a_Position = gl.getAttribLocation(program, 'a_Position');
    59. //点的大小
    60. let a_PointSize = gl.getAttribLocation(program, 'a_PointSize')
    61. //创建坐标的buffer
    62. let buffer = gl.createBuffer();
    63. //绑定buffer
    64. gl.bindBuffer(gl.ARRAY_BUFFER, buffer)
    65. //将三角形的坐标数据放入缓冲区
    66. gl.bufferData(gl.ARRAY_BUFFER, positonArray, gl.STATIC_DRAW)
    67. // a_Position 赋值
    68. gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);
    69. // 使能顶点位置
    70. gl.enableVertexAttribArray(a_Position);
    71. //创建顶点大小的buffer
    72. let pointSizeBuffer = gl.createBuffer();
    73. //绑定buffer
    74. gl.bindBuffer(gl.ARRAY_BUFFER, pointSizeBuffer);
    75. // 将点的大小数据放入缓冲区
    76. gl.bufferData(gl.ARRAY_BUFFER,sizeArray,gl.STATIC_DRAW);
    77. // a_PointSize 赋值
    78. gl.vertexAttribPointer(a_PointSize, 1, gl.FLOAT, false, 0, 0)
    79. // 使能顶点大小
    80. gl.enableVertexAttribArray(a_PointSize);
    81. //绘制
    82. gl.clearColor(0.0, 0.0, 0.0, 1.0);
    83. gl.clear(gl.COLOR_BUFFER_BIT);
    84. //绘制点 从第0个开始,绘制4次
    85. gl.drawArrays(gl.POINTS, 0, 4)
    86. script>
    87. body>
    88. html>

  • 相关阅读:
    flask框架添加异步任务处理模型任务
    Java 19新特性:Structured Concurrency (结构化并发编程)
    【Hierarchical Coverage Path Planning in Complex 3D Environments】
    深眸科技以需求定制AI视觉解决方案,全面赋能产品外观缺陷检测
    CSS3病毒病原体图形特效
    国庆北京游玩攻略
    推荐系统笔记(十一):使用coo_matrix函数遇到的坑
    云原生技术实践:Kubernetes集群的部署与运维
    Linux远程连接服务器题
    JAVA重写与多态
  • 原文地址:https://blog.csdn.net/huhudeni/article/details/134078283