webGL编程指南 第五章 MultiAttributeSize_interleaved.js

news/2024/10/17 23:34:27/

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

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

git代码地址 :空

在上一章节中我们使用的是2个buffer,向着色器中传递数据,本章节中我们学习使用一个buffer传递数据。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><canvas id='canvas'></canvas><script>let canvas = document.getElementById('canvas');let gl = canvas.getContext('webgl');//顶点着色器let vertexShaderSource = `attribute vec2 a_Position;attribute float a_PointSize;void main(){gl_Position = vec4(a_Position,0.0,1.0) ;gl_PointSize = a_PointSize;}`//片元着色器let fragmentShaderSouce = `precision mediump float;void main(){gl_FragColor = vec4(1.0,0.0,0.0,1.0);}`//  创建顶点着色器let vertexShader = gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader, vertexShaderSource)gl.compileShader(vertexShader)//创建片元着色器let fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader, fragmentShaderSouce)gl.compileShader(fragmentShader)//创建渲染程序let program = gl.createProgram();gl.attachShader(program, vertexShader);gl.attachShader(program, fragmentShader);gl.linkProgram(program);//使用当前渲染程序gl.useProgram(program)//检查片元着色器的是否正确if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {throw gl.getProgramInfoLog(program);}//三角形的坐标let positonArray = new Float32Array([0.5, 0.5, 10.0,-0.5, -0.5, 20.0,0.5, -0.5, 30.0,-0.5, 0.5, 40.0])//每个坐标点但的大小let sizeArray = new Float32Array([10.0, 20.0, 30.0, 40.0])let size = sizeArray.BYTES_PER_ELEMENT//位置坐标变量let a_Position = gl.getAttribLocation(program, 'a_Position');//点的大小let a_PointSize = gl.getAttribLocation(program, 'a_PointSize')//创建坐标的bufferlet buffer = gl.createBuffer();//绑定buffergl.bindBuffer(gl.ARRAY_BUFFER, buffer)//将三角形的坐标数据放入缓冲区gl.bufferData(gl.ARRAY_BUFFER, positonArray, gl.STATIC_DRAW)// a_Position 赋值gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, size*3, 0);// 使能顶点位置gl.enableVertexAttribArray(a_Position);//创建顶点大小的bufferlet pointSizeBuffer = gl.createBuffer();//绑定buffergl.bindBuffer(gl.ARRAY_BUFFER, pointSizeBuffer);// 将点的大小数据放入缓冲区gl.bufferData(gl.ARRAY_BUFFER, positonArray, gl.STATIC_DRAW);// a_PointSize 赋值gl.vertexAttribPointer(a_PointSize, 1, gl.FLOAT, false,  size*3, size*2)// 使能顶点大小gl.enableVertexAttribArray(a_PointSize);//绘制gl.clearColor(0.0, 0.0, 0.0, 1.0);gl.clear(gl.COLOR_BUFFER_BIT);//绘制点  从第0个开始,绘制4次gl.drawArrays(gl.POINTS, 0, 4)</script>
</body></html>


http://www.ppmy.cn/news/1185671.html

相关文章

voice 和token 互相转

voice 和token 互相转 解释代码解释 这段代码实现了一个将音频数据转换为 token 列表,并将 token 列表转换回音频的转换过程。以下是代码的主要步骤: 导入所需的库,包括 paddle、numpy、tqdm 和 glob。 定义一个名为 read_and_gen_token 的函数,该函数接受一个音频文件名作…

网上的流量卡与实际不符,可能是这三种原因导致的!

很多朋友反映&#xff0c;自己在网上买的流量卡套餐内流量与实际情况不符&#xff0c;其实&#xff0c;这是一种比较常见的现象&#xff0c;今天&#xff0c;关于其中的原因&#xff0c;小编给大家介绍一下。 ​ 如果买的流量卡套餐内流量与实际不符&#xff0c;无非有三种原因…

AI助力隧道等洞体类场景下水泥基建缺陷检测,基于DeeplabV3Plus开发构建洞体场景下壁体建筑缺陷分割系统

随着智能化硬件的加持&#xff0c;越来越多的场景开始有AI的助力&#xff0c;诸如&#xff1a;道路自动巡检养护、隧道巡检、铁路质检等等&#xff0c;引入AI技术可以大幅降低人工工作量&#xff0c;提升质检的工作效率&#xff0c;在前面的文章中我们已经落地实践开发洞体类场…

Baklib Max 新产品上线,全面助力企业数字化体验

2023年9月28日&#xff0c;数字内容云平台Baklib Max正式上线。作为一款旨在统一管理企业数字媒体资产的平台&#xff0c;Baklib Max通过网站、知识库、社区、Chat等多种形式多场景应用展示&#xff0c;全面实现对企业数字资产、媒体内容、知识沉淀的统一管理应用&#xff0c;帮…

echarts修改图例legend样式:正方形、矩形、圆形、圆角

ECharts 提供的标记类型有 ‘circle’, ‘rect’, ‘roundRect’, ‘triangle’, ‘diamond’, ‘pin’, ‘arrow’, ‘none’ legend: {icon: circle }参考文章 echarts 图例修改legend中icon的形状及大小

ESP8266模块常规调试过程讲解

ESP8266-WIFI模块串口调试过程讲解 一、ESP8266介绍 ESP8266是一个高度集成的无线SoC(System on a Chip)模块,基于ESP8266芯片,集成了Wi-Fi功能。具有丰富的特性和功能,广泛应用于各种物联网项目中。 ESP8266模块支持802.11b/g/n无线标准,内置TCP/IP协议栈,可以实现串…

【C++基础入门】44.C++中对象模型分析(上)

一、回归本质 class 是一种特殊的 struct 在内存中 class 依旧可以看作变量的集合class 与 struct 遵循相同的内存对齐规则class 中的成员函数与成员变量是分开存放的 每个对象有独立的成员变量所有对象共享类中的成员函数值得思考的问题 下面看一个对象内存布局的代码&#x…

LeetCode 面试题 16.08. 整数的英语表示

文章目录 一、题目二、C# 题解 一、题目 给定一个整数&#xff0c;打印该整数的英文描述。 示例 1: 输入: 123 输出: “One Hundred Twenty Three” 示例 2: 输入: 12345 输出: “Twelve Thousand Three Hundred Forty Five” 示例 3: 输入: 1234567 输出: “One Million Two …