当前位置: 首页 > news >正文

Webgl利用缓冲区绘制三角形

在这里插入图片描述

什么是attribute 变量

它是一种存储限定符,表示定义一个attribute的全局变量,这种变量的数据将由外部向顶点着色器内传输,并保存顶点相关的数据,只有顶点着色器才能使用它

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><canvas id="webgl" width="200" height="200"></canvas><script>const webgl = document.getElementById('webgl')const gl = webgl.getContext('webgl')// 创建着色器const vertexShader = gl.createShader(gl.VERTEX_SHADER)const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER)// 绑定数据源gl.shaderSource(vertexShader, `attribute vec4 a_Position;void main(){gl_Position = a_Position;}`)gl.shaderSource(fragmentShader, `void main(){gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);}`)// 编译着色器gl.compileShader(vertexShader)gl.compileShader(fragmentShader)// 创建着色器程序const program = gl.createProgram()// 绑定着色器gl.attachShader(program, vertexShader)gl.attachShader(program, fragmentShader).// 连接着色器gl.linkProgram(program)// 使用着色器gl.useProgram(program)// 定义一个类型数组保存顶点坐标值const vertices = new Float32Array([0.0, 0.5, -0.5, -0.5, 0.5, -0.5])// 创建缓冲区const vertexBuffer = gl.createBuffer()// 绑定缓冲区gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer)// 存入数据gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW)// 获取到顶点着色器中变量const a_Position = gl.getAttribLocation(program, 'a_Position')// 从当前绑定的缓冲区中读取顶点数据(index, size, type, normalized, stride, offset)gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0)// 激活变量的使用gl.enableVertexAttribArray(a_Position)// 绘制指定位置的三角图形gl.drawArrays(gl.TRIANGLES, 0, 3)</script>
</body></html>
http://www.lryc.cn/news/143707.html

相关文章:

  • 正则表达式应用
  • 9.4 【C语言】用指针处理链表
  • 后端面试话术集锦第四篇:rabbitmq面试话术
  • Linux目录结构与文件管理(01) (三)
  • OpenCV为老照片,黑白照片增加色彩
  • HTML之VSCode简单配置与创建
  • 2023亿发一体化新零售POS收银解决方案,打造连锁门店经营新未来
  • Android ---使用Jenkins 打包release版本不能安装或者安装后不显示APP
  • 【Spring】什么是 AOP(面向切面编程) ? 为什么要有 AOP ? 如何实现 Spring AOP ?
  • 11.并发:自旋锁
  • 使用EF Core更新与修改生产数据库
  • 法律小程序开发:让法律咨询更便捷
  • 【C++多线程】C++11互斥锁和条件变量实现生产者消费者模型
  • Webpack迁移Vite采坑指南
  • 设计模式-职责链模式
  • CMake学习笔记-VSCode使用Cmake编译C++工程
  • redis相关
  • 【VRTK4.0运动专题】轴移动AxisMove(真实身体的移动)
  • 【vue2-helper插件】提供Mixins和组件库相关的类型提示、智能补全、跳转等功能~
  • 论文解读 | ScanNet:室内场景的丰富注释3D重建
  • 手写数字识别之网络结构
  • 《动手深度学习》 线性回归从零开始实现实例
  • Redis 命令
  • Linux网络编程:线程池并发服务器 _UDP客户端和服务器_本地和网络套接字
  • nvm安装electron开发与编译环境
  • 玩转Mysql系列 - 第7篇:玩转select条件查询,避免采坑
  • 启动程序结束程序打开指定网页
  • 从零开始学习 Java:简单易懂的入门指南之包装类(十九)
  • leetcode分类刷题:哈希表(Hash Table)(一、数组交集问题)
  • UML四大关系