GLSL ES中的布局限定符(layout)

2023-10-30

一、存储限定字

首先需要了解存储限定字才能正确认识布局限定符。
在webGL中要实现着色器和JS代码之间的数据交互,主要靠三类变量(分类的依据是存储限定字),分别是:attribute,uniform,varying,其中attrbute和uniform变量负责JS程序和两种着色器(顶点着色器和片元着色器)之间的交互,varying变量负责顶点着色器和片元着色器之间的交互。
而着色器和JS之间数据的交互主要依靠webGL上下文中自定义的函数实现。

//获取WebGL上下文
var canvas=document.createElement(“canvas”);
var gl=getWebGLContext(canvas)
函数 函数的作用
gl.getUniformLocation() 获得uniform变量的存储位置
gl.getAttribLocation() 获得attribute变量的存储位置
gl.uniform4321f() 说明:4321中的任一个数字均可以 给uniform变量赋值
gl.vertexAttrib1234f() 说明:4321中的任一个数字均可以 给attribute变量赋值,一次只能赋值一个顶点
gl.vertexAttribPointer() 将缓冲区对象赋值给attribute变量,将缓冲区中的所有点赋值给attribute变量
上述的函数的具体参数及使用方法参考网址:点击这里

二、布局限定符

在上述存储限定字的基础上,进一步了解布局限定符layout。这里的着重点放在gl.getAttribLocation(shaderProgram,“XX”)函数上

参数 含义
shanderProgram 即用gl.createProgram()函数创建的染色器程序
“XX” 染色器程序中定义的attribute变量的变量名
正如上述函数所示,如果想要获得一个uniform变量的存储地址,需要知道这个变量在着色器程序中的变量名。有了layout,事情就发生改变了。先来看一下下面这段包含layout的代码。
//js代码
const  ATTRIB_POS = 0;
const  ATTRIB_UV   = 1;
gl.vertexAttribPointer( ATTRIB_POS, 4, GL_FLOAT, GL_FALSE, 0, 0 );
glVertexAttribPointer( ATTRIB_UV, 2, GL_FLOAT, GL_FALSE, 0, 0 );
//着色器代码
layout(location = 0) in vec4 vertexPosition;
layout(location = 1) in vec2 vertexUV;

在上述的代码只对attribute变量进行了赋值的操作,而省略了获得其存储位置的过程,主要的功臣就是layout(location=0),在js中直接可以操作location=0,即上述代码中的ATTRIB_POS。到这里就是现阶段我对layout的理解,菜鸟一只,欢迎批评指正。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GLSL ES中的布局限定符(layout) 的相关文章

  • 在Three.JS中通过鼠标点击选择Collada对象

    我需要通过鼠标单击在 Three JS 中选择 Collada 对象 我知道我可以根据对象的 id 选择对象 并且我看到了一些用户可以与几何定义的对象交互的示例 here http mrdoob github com three js ex
  • 通过 canvas.toDataURL 将画布保存到图像会产生黑色矩形

    我正在使用 Pixi js 并尝试将动画帧保存到图像中 canvas toDataUrl 应该可以工作 但我得到的只是一个黑色矩形 查看实例here http anatoliyg github io toaster 我用来提取图像数据并设置
  • 如何快速发现复杂场景中某个点是否被遮挡?

    我有一个复杂的 3D 场景 需要根据 3D 坐标在其上显示 HTML 元素 我只是简单地覆盖了一个div标签放在顶部并使用 CSS 定位 但是 当 3D 坐标被模型遮挡时 或者以另一种方式表述 当它在相机中不可见时 时 我还需要部分隐藏它
  • 透明跳脸?

    我一直在开发一个在 Three js 库之上运行的 WebGL 项目 我正在渲染几个半透明网格 我注意到根据倾斜相机的角度 顶部会出现不同的对象 为了说明这个问题 我使用三个半透明立方体做了一个快速演示 当您将图像旋转到垂直于屏幕的方向时
  • Webgl:写入 gl_FragDepth 的替代方法

    在WebGL中 是否可以写入片段的深度值或以其他方式控制片段的深度值 据我所知 gl FragDepth 不存在于 webgl 1 x 中 但我想知道是否有其他方法 扩展 浏览器特定支持等 来做到这一点 我想要归档的是让光线追踪对象与使用通
  • canvas 与 openGL 的功能是什么?

    我知道如果你向 openGL 发送静态且很少变化的纹理 例如像图块一样 openGL 会产生奇迹 但当你有不断变化的精灵时就不行了 是否有可能纯粹从画布上创建类似绑架这样的游戏 它的性能如何 可以使用画布创建诸如绑架之类的游戏 但最终您将在
  • 如何检测用户是否在浏览器中启用了全屏

    当用户在 Chrome 或 FireFox 中启用全屏时 是否会触发一些 JavaScript 事件 我有 WebGL 应用程序 画布宽度和高度设置为一定大小 当用户启用全屏时 我想调整其大小 如果没有这样的事件 我是否应该开始研究用画布填
  • SketchUp 导出带有纹理的 obj - 如何

    Windows 7 64 位 SketchUp Make 13 0 4812 Goal 将 SketchUp skp 模型转换为 obj并使用 Three js 加载到 WebGL Problem sketchup 将模型导出到 obj具有
  • 防止片段着色器中的循环展开

    我正在使用最新版本的 Chrome 和 Firefox 为 WebGL GLSL ES 1 0 编写一个片段着色器 并且编写了一个迭代算法 首先 我发现循环的长度是非常有限的 文档说它必须在编译时是可猜测的 这意味着它必须是一个常量或非常接
  • Webgl使用视口+剪刀更新区域

    我一直在尝试创建一个多视口 webgl 应用程序 对于每个视图 我使用视口 剪刀将所有内容渲染得非常好 但现在我想改进渲染并只渲染更新的视图 因此跳过过度绘制 我做了一个小演示来展示这个想法 http kile stravaganza or
  • Three.js - 在自定义几何体上平滑兰伯特材质着色的问题

    我在 Three js 中创建了一个自定义几何体 现在 我想创建一个使用平滑阴影兰伯特材质的网格 使用循环 我创建了顶点数组 然后创建了面 然后我调用了 geometry computeCentroids geometry computeF
  • 如何从 dxf 文件解析 nurbs 曲面?或者你知道用于解析它的库(对于js,如果存在或任何其他语言)?

    我正在尝试解析 autocad nurbs 曲面并使用 JavaScript 中的 webGL 进行三角测量绘制 我已经在寻找 bjnortier 的 dxf 解析器 它支持大多数实体 如直线 圆弧 3Dface 折线 lwpolyline
  • 将球体 a 旋转到自身的 b 点

    我试图弄清楚如何将球体从 A 点旋转到 B 点 我找到了一些Unity3d代码 Quaternion rot Quaternion FromToRotation pointA pointB sphere transform rotation
  • 如何在 Ubuntu 的 headless chrome 中启用 WebGL?

    如何在 Ubuntu 14 的 headless chrome 中启用 webgl 或安装 webgl 我尝试安装 libosmesa6 但这没有帮助 有人可以指出我正确的方向吗 我想使用 webgl 来处理无头 chrome 和 sele
  • 在 Three.js 中渲染具有大量对象的多个场景的最佳方式

    想象一下 您想要绘制两个场景 每个场景都有数百个球体 并提供在这些场景之间切换的功能 做到这一点的最佳方法是什么 目前 一个开关大约需要 4 到 5 秒 因为我要删除 创建和绘制每个开关上的所有球体 下面是在场景切换上运行的代码示例 cle
  • 将 WebGL 应用程序部署为本机 iOS 或 Android 应用程序?

    有谁知道如何将 WebGL 应用程序部署为本机 iOS 或 Android 应用程序 商业中间件是可以接受的 但开放项目会更好 谢谢 作为 Joris 答案的延伸 这似乎是基于内森 德弗里斯的作品 http atnan com blog 2
  • VS CODE 中的 WEBGL 自动完成

    我有一个学校项目 我需要使用 WEBGL 但是在没有自动补全的情况下编写所有代码是相当困难的 我没有找到合适的扩展名 你有想法吗 为了让 Visual Studio 代码能够自动完成 它需要知道变量的类型 例如 如果你有这个 const g
  • 解决 Three.js / webGL 中的 gl_PointSize 限制

    我正在使用 Three js 创建交互式数据可视化 此可视化涉及渲染 68000 个节点 其中每个不同的节点具有不同的大小和颜色 最初我尝试通过渲染网格来实现此目的 但事实证明这非常昂贵 我当前的尝试是使用 Three js 粒子系统 每个
  • webgl中绑定缓冲区的逻辑是什么?

    有时我发现自己在以不同顺序声明缓冲区 使用 createBuffer bindBuffer bufferdata 和在代码的其他部分 通常在绘制循环中 重新绑定它们之间挣扎 如果我在绘制数组之前不重新绑定顶点缓冲区 控制台会抱怨尝试访问超出
  • WebGL - 如何传递无符号字节顶点属性颜色值?

    我的顶点由具有以下结构的数组组成 Position colour float float float byte byte byte byte 传递顶点位置没有问题 gl bindBuffer gl ARRAY BUFFER this vbo

随机推荐

  • Python数据分析-绘图-2-Seaborn进阶绘图-3-分布图

    一 kdeplot 核密度估计用来估计未知的密度函数 是非参数检验之一 直观上来看是平滑后的直方图 核密度估计方法不利用有关数据分布的先验知识 对数据分布不附加任何假定 是一种从数据样本本身出发研究数据分布特征的方法 因而 在统计学理论和应
  • 节节高升 蓝桥杯模拟

    问题描述 小蓝要上一个楼梯 共 15 级台阶 小蓝每步可以上 1 级台阶 也可以上 2 级 3 级或 4 级 再多就没办法一步走到了 每级台阶上有一个数值 可能正也可能负 每次走到一级台阶上 小蓝的得分就加上这级台阶上的数 值 台阶上的数值
  • Java获得当前日期是星期几

    第一种方法 获取当前日期是星期几 br param date return 当前日期是星期几 public String getWeekOfDate Date date String weekDays 星期日 星期一 星期二 星期三 星期四
  • Antd Design Mobile tab去除下方蓝色边框和对tab里面的sticky布局的影响

    前言 最近在写手机端的项目 技术栈是 react Antd Desin Mobile 有个页面需要使用antd的组价tabs 然后遇到了tab下方有俩蓝色边框 一大一小 小的在上 大的在下 下方是表格 表格使用sticky布局 布局失效 百
  • Ubuntu19.04环境下的系统安装+花屏问题的解决

    说在前面 本文只做自我总结用 因为一次次重装环境到处找博客看帖实在是太麻烦了 而且网上的博客还良莠不齐 还有好多版本不兼容 本文中的某些图片是截图 某些是照片 在不能截图的情况下 图片比例可能会显示不正常 鼠标移到图片上单击放大查看就可以了
  • 区块链-技术简介

    1 什么是区块链 区块链技术是利用块链式数据结构来验证与存储数据 利用分布式节点共识算法来生成和更新数据 利用密码学的方式保证数据传输和访问的安全 利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式 简单
  • 复制CSDN的BLOG代码,去掉前面行号的方法

    我们如果从CSDN的BLOG复制代码 出现前面的行号 比如 1 文本没有缩写 2 Specify blanket rules for all elements 3 font size 12px 4 line height 160 5 fon
  • 关于java静态方法里只能调用静态变量的思考

    最近一段时间里面写了这样一个类 public class DBManager private static MySqliteHelper helper public static MySqliteHelper getHelper Conte
  • Geotools与OGC(二)----WKT坐标系信息的读取

    WKT除了有针对几何信息的描述外 也有针对空间参考的描述 以下我直接套用OGC规范中的描述 https www osgeo cn doc ogcstd ogc standard ch02 chapter1 chapter html wkb
  • 每天坐6小时以上,死亡率会增高——但站着工作就管用吗?

    此篇文章来自一篇科普类文章 作为IT行业人士 每天坐着的时间几乎都已超过了6小时 我们这些久坐的同仁儿们需要关注自己的健康 运动是我们健康的砝码哦 英文原文 Why I killed my standing desk 想必很多上班族都深受颈
  • 为什么老程序员的效率如此高?

    首先 优秀得神枪手一定是靠子弹喂出来得 没有几千上万个子弹得真枪实战 就很难在战场上一击枪杀敌人 我经常会看到一些新手程序员在写代码的时候需要频繁的去查看文档或者是百度搜索各种接口的用法 有时写一个功能要查个几十次 很多时间都浪费在了搜索上
  • upload-labs大详解

    pass1 上传一个php一句话文件 记得改成php格式 发现不允许上传php类型的 只能上传jpg gif pngl的我们打算用burp抓包 先上传jpg的 然后用burp改成php的 放包后 找到它的存储位置 用蚁剑连接 成功连接 pa
  • ReactNative常用插件使用

    项目版本介绍 目前使用的项目node版本v14 17 5 npm版本6 14 14 reactNative项目使用的模板结合typescript语法的项目模板架构 安装的方式如下 npx react native init xxx 项目名
  • TensorFlow团队成员说:深度学习的未来,在单片机的身上

    便携栗 编译自 Pete Warden s Blog量子位 出品 公众号 QbitAI Pete Warden 是谷歌TensorFlow团队成员 也是TensorFLow Mobile的负责人 常年遨游在深度学习的大海 另外 这些看上去很
  • 如何判断视频的比例(4:3/16:9)和分辨率?

    如何区分16 9和4 3 将 视频分辨率的宽度除以高度 运算结果接近1 7的是16 9 超过1 77都归类为16 9 运算结果接近1 3的4 3 例如您要上传的视频分辨率是 640 480 用640 480 1 33 那么这个就是一个4 3
  • 阿里云服务器型号大全及机型如何选择(建议收藏)

    不同的阿里云实例规格可以提供的计算能力不同 适用于不同的业务场景和使用场景 1 根据使用场景来选择 下图显示了阿里云ECS的部分通用计算和异构计算实例规格族及其对应的业务场景 简单来看 g6e和g6型能够满足一般的通用需求 对于比如金融 政
  • electron打包:electron-packager及electron-builder两种方式实现桌面端应用程序打包

    electron vue初始化 electron vue初始化命令 vue init simulatedgreg electron vue my project 我们在初始化electron vue项目时 可以选择打包方式 electron
  • vue——移动端在线预览pdf并能缩放(pdfh5)

    最近接了一个需求需要在移动端预览pdf 并切要能缩放 百度发现大多推荐vue pdf 但是vue pdf这个包 安装之后运行报错 解决之后的实现效果不符合需求需要 而且 实现缩放功能的时候 整个canvas画布整个放大 虽然有放大效果 但是
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • GLSL ES中的布局限定符(layout)

    一 存储限定字 首先需要了解存储限定字才能正确认识布局限定符 在webGL中要实现着色器和JS代码之间的数据交互 主要靠三类变量 分类的依据是存储限定字 分别是 attribute uniform varying 其中attrbute和un