为 webgl 中的每个对象使用不同的顶点和片段着色器

2024-01-22

我在 webgl 中有一个包含多个对象的场景。对于每个对象,我想使用不同的顶点和片段着色器。我的第一个问题是,是否可以为每个对象都有一个着色器?我知道在 opengl 中这是可能的。

这是与我的想法类似的伪代码。任何例子将不胜感激。

glenableshader
draw triangle
gldisableshader

glenableshader
draw square
gldisableshader

谢谢


您几乎可以查找任何 WebGL 示例并将其转换为多着色器示例。

伪代码

// At init time
for each shader program
    create and compile vertex shader
    create and compile fragment shader
    create program and attach shaders
    link program
    record locations of attributes and uniforms

for each model/set of geometry/points/data 
    create buffer(s) for model
    copy data into buffer(s) for model

for each texture
    create texture
    usually asynchronously load textures

// at draw time
clear

for each model
   useProgram(program for model)
   setup attributes for model
   setup textures for model
   set uniforms for model
   draw

这与使用 1 个着色器程序绘制 1 个模型没有什么不同。只需进行相同的设置即可。

更多代码...

设置属性看起来像

for each attribute used by model
   gl.enableVertexAttribArray(attribLocation);
   gl.bindBuffer(gl.ARRAY_BUFFER, bufferWithDataForAttribute);
   gl.vertexAttribPointer(attribLocation, ...);

设置纹理(可能)看起来像这样

for each texture used by model
   gl.activeTexture(gl.TEXTURE0 + ndx);
   gl.bindTexture(gl.TEXTURE_2D, texture);

最后你会使用该程序

gl.useProgram(programForModel);
for each uniform
   gl.uniform???(uniformLocation, uniformValue);

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

为 webgl 中的每个对象使用不同的顶点和片段着色器 的相关文章

  • Javascript Promise“then”始终运行,即使 Promise 未能执行

    我希望当调用第二个 then 时不执行第三个 then 但是 即使 Promise 被拒绝 调用第二个 then 并且代码返回 rejected 然后返回 undefined 它仍然调用第三个 then 如何不运行第三个 then 这样 未
  • Three.js:缩放几何图形后错误的 BoundingBox

    在我的场景中 我有一个简单的立方体 var test new THREE Mesh new THREE CubeGeometry 10 10 10 new THREE MeshBasicMaterial scene add test 该立方
  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • Chrome 中的性能问题

    我目前正在从事一个相对较大的项目 使用 AngularJs 构建 应用程序的一部分是一个表单 您可以向其中添加任意数量的页面 不幸的是 添加了很多不必要的垃圾 即表示表单模型的对象可能会变得非常大 在某些时候 Chrome 基本上无法处理它
  • 使用 JavaScript 禁用第三方 cookie

    我正在努力根据所有在欧盟运营的公司的数据保护规则实施新的 Cookie 政策合规性 根据该规则 用户在使用任何网站时必须能够拒绝 接受除必需的 Cookie 之外的所有内容 在我客户的网站中 我可以看到正在存储以下第三方 cookie ga
  • 如何格式化 Highcharts 的 (x,y) 对数据的日期时间

    我的序列化方法会产生如下所示的日期时间字符串 2014 07 09T12 30 41Z 为什么下面的代码不起作用 function container highcharts xAxis type datetime series data x
  • 摩卡 - Chai Karma“套件未定义”

    我对 jscript tdd 很陌生 遇到了问题 希望有人能告诉我我在做什么 在浏览器中运行测试 通过 HTML 文件 一切正常 通过节点和业力运行它们我得到以下异常 我想在 node js 主机的 karma 中使用 Mocha 和 Ch
  • 图像无法在带有 DOM 的 IE 中加载:控制台中的 7009 错误(无法解码)

    当在 IE 中的单个页面上加载许多图像时 在 IE11 中重现 其中一些图像开始加载失败 并在控制台中出现类似以下警告的内容 DOM7009 无法解码 URL 处的图像 某些唯一的 url 当我查看网络流量时 似乎确实从服务器收到了每个图像
  • 可以在初始 DOM 解析期间/之前修改 DOM 吗?

    是否可以在初始 DOM 解析期间或之前修改 DOM 或者我是否必须等到 DOM 被解析和构建之后才能与其交互 更具体地说 是否有可能阻止 DOM 中的脚本元素使用用户脚本 内容脚本或 Chrome 或 Firefox 中的类似脚本运行 在解
  • 使用 dc.js 按条形值对条形图中的条形进行排序(排序)

    如何通过维度的计算值而不是维度本身的名称对 dc js 示例中的 x 轴 维度 进行排序 例如 请考虑序数条形图的 dc js 示例 https github com dc js dc js blob master web examples
  • 隐藏 Div 的父级

    我只是想隐藏父divcomments section div class content content green div div div 我试过这个 document getElementById comments section pa
  • Draggable JS Bootstrap 模式 - 性能问题

    对于工作中的项目 我们在 JavaScript 中使用 Bootstrap Modal 窗口 我们想让一些窗口可移动 但我们遇到了 JQuery 的性能问题 myModal draggable handle modal header Exa
  • Bootstrap按钮加载+Ajax

    我正在使用 Twitter Bootstrap 的按钮加载状态 http twitter github com bootstrap javascript html buttons http twitter github com bootst
  • 有没有办法使用 Rspec/Capybara/Selenium 将 javascript console.errors 打印到终端?

    当我运行 rspec 时 是否可以让 capybara selenium 向 rspec 报告任何 javascript console errors 和其他异常 我有一大堆测试失败 但当我手动测试它时 我的应用程序正在运行 如果不知道仅在
  • 如何纠正流警告:解构(缺少注释)

    我正在编写一个小型 React Native 应用程序 并且正在尝试使用 Flow 但我无法在任何地方真正获得有关它的正确教程 我不断收到错误 destructuring Missing annotation 有关 station 这段代码
  • 调整图像大小并将画布旋转 90 度

    这里有很多关于在 js 上使用画布旋转图像的主题 我阅读了其中的大部分内容 但无法找到解决我的问题的方法 我正在接收任何分辨率的图像 来自上传组件 我将其大小调整为 1024x768 如下所示 var canvas document cre
  • 正则表达式 - 从 markdown 字符串中提取所有标题

    我在用灰质 https www npmjs com package gray matter 以便将文件系统中的 MD 文件解析为字符串 解析器产生的结果是这样的字符串 n Clean er ReactJS Code Conditional
  • 在 Shopify 商店中嵌入 Vue 组件

    在产品页面中 我尝试显示自定义 Vue 组件 为简洁起见 该组件根据给定的产品 ID 显示 Firebase 数据库中的一些信息 我最初尝试将其制作为 Shopify 应用程序 以便我可以访问他们的 API 我实现了 OAuth 并且可以检
  • 如何隐藏/禁用 Highcharts.js 中的图例框?

    我想问是否可以使用 HighCharts js 库隐藏图表中的所有图例框 var chart object chart renderTo render to type graph type colors graph colors title
  • Javascript Replace() 和 $1 问题

    我正在尝试创建一个脚本来搜索文本中的模式并在它找到的字符串周围包裹一个标签 shop attributes td each function this html function i html return html replace E 0

随机推荐

  • 关于Javascript注入的问题

    我一直在 asp net mvc 学习网站上阅读有关 JavaScript 注入的内容 这真是令人大开眼界 我什至从未意识到 想过有人使用 JavaScript 来进行一些奇怪的屁股注入攻击 然而 它给我留下了一些悬而未决的问题 First
  • 使用Python请求获取html?

    我正在尝试自学一些基本的网络抓取 使用 Python 的 requests 模块 我能够抓取各种网站的 html 直到我尝试了以下方法 gt gt gt r requests get http www wrcc dri edu WRCCWr
  • 如何使用变量来引用代号一中的组件?

    我使用 UIBuilder 创建了一个 UI 而不是总是使用findXXXX 我很乐意在Statemachine public class Statemachine private Container c private Tabs t in
  • 是否可以在 launchSettings.json 中引用环境变量?

    我想使用 NuGet 包中的可执行文件来运行我的代码 因此 该 exe 位于我的用户配置文件目录中 所以 该文件看起来像这样 profiles UITests commandName Executable executablePath C
  • 如何在 iOS Safari 上设置渐变背景透明度?

    以下 CSS 在 Safari 上不起作用 在 iPad iOS 上测试 map left navi background ffffff background moz linear gradient left ffffff 35 trans
  • 列表对象没有属性副本

    feed obj self get feed obj request kwargs get feed id ad ingredient id kwargs get ad ingredient id adingredient obj AdIn
  • 使用 tabulate Python 包生成正确的 LaTeX 表

    我正在使用tabulate https pypi python org pypi tabulate 用于生成正确 LaTeX 格式的表格的 Python 包 这是一个 MWE from tabulate import tabulate ta
  • 获取当前正在执行的 Javascript 的 URL

    我正在尝试查找当前正在执行的 javascript 的 url 我知道我可以使用window location href对于当前页面 但这不一定是正在执行的脚本的路径 任何帮助是极大的赞赏 Thanks EDIT 1 我完全愿意使用插件等来
  • 没有规则为“macosx10.10”创建目标 SDK 路径

    我使用的是mac osx10 10 QT5 4 VTK6 2 运行我的代码时出现以下错误 make 2 没有规则可以创建目标 Applications Xcode app Contents Developer Platforms MacOS
  • 获取 setState 不是一个函数

    我收到以下错误 bundle js 31367 未捕获类型错误 this setState 不是 功能 JSX componentDidMount ajax url http intelligencevillage wxtui cn ind
  • 从变量目标 c 中插入换行符

    我正在使用 xml 将数据拉入我的 iphone 应用程序 然后将 xml 值放入变量中 示例变量 123 London road n London n England 然后将该变量设置为标签 我希望换行符出现在标签中 而不是打印 n 如果
  • 是否可以使用 Spring API Gateway 进行威胁防护?

    我将使用 Netflix Zuul 实现 API 网关 是否可以设置任何规则来防止 SQL注入 XML 威胁防护 JSON 威胁防护 我发现只有外部解决方案 API 网关 支持它 None
  • 带有附加 SDK 的 Firefox 中的自定义上下文菜单?

    我希望向显示的 Firefox 上下文菜单添加一个菜单项 仅当用户右键单击特定 URL 时 我有一个测试 url 的函数 我曾经通过订阅 popupshowing 事件来做到这一点 var item document getElementB
  • 使用 MSMQ 和 SQL Server 进行分布式事务,但有时会出现脏读

    我们的 SQL Server 2014 数据库设置为READ COMMITTED SNAPSHOT 我们使用 MSMQ 和分布式事务 我们使用 MassTransit 2 10 在我们系统的一部分中 我们从队列中读取一条消息 进行数据库更新
  • 如何调试nodejs的二进制模块?

    我有一个用 C 编写的 node js 模块 它为 C 库提供一些绑定 该库因 SIGSEGV 而崩溃 因此我需要使用 GDB 对其进行调试并找出问题所在 我已经有该模块的源代码 node modules somelib 如果我进入该文件夹
  • Test::Unit/rake 命令的 Rails 颜色突出显示?

    使用运行测试 单元时耙子测试从 Rails 3 项目目录中的终端命令 测试结果输出没有颜色 因此 不能一目了然地解读它 有没有办法获得结果的彩色输出 就像您可以在 rspec 中获得的那样 gt rspec colour 我发现 redgr
  • 按天对 Mongoid 对象进行分组

    在控制台中反复尝试后 我想出了这种方法 可以按类似活动记录 Mongoid 的对象发生的日期对其进行分组 我不确定这是实现这一目标的最佳方法 但它确实有效 有谁有更好的建议 或者这是一个好方法吗 events is an array of
  • 将 R 中的数据帧输出到 .csv

    因此 我尝试根据 R 中的数据帧编写 csv 文件 但由于某种原因 我不断收到以下错误 Error in External2 C writetable x file nrow x p rnames sep eol unimplemented
  • 使用 Python / Pandas / Numpy 进行几何级数(无循环并使用递归)

    我想使用 Python Pandas Numpy 实现几何级数 这是我所做的 N 10 n0 0 n array np arange n0 n0 N 1 u pd Series index n array un0 1 u n0 un0 fo
  • 为 webgl 中的每个对象使用不同的顶点和片段着色器

    我在 webgl 中有一个包含多个对象的场景 对于每个对象 我想使用不同的顶点和片段着色器 我的第一个问题是 是否可以为每个对象都有一个着色器 我知道在 opengl 中这是可能的 这是与我的想法类似的伪代码 任何例子将不胜感激 glena