为 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注入的问题

    我一直在 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