【问题标题】:Using Textures with custom SCNPrograms in SceneKit在 SceneKit 中使用带有自定义 SCNPrograms 的纹理
【发布时间】:2015-02-08 01:14:14
【问题描述】:

是否有任何可行的方法在 Scenekit 中将纹理与 SCNProgram 着色器一起使用? 据我所知,没有办法从 SCNProgram 中访问默认的 SCNMaterial 纹理(我知道我可以从着色器修改器中访问它们,但不幸的是,据我所知,我无法做我需要做的事情着色器修饰符)。

管理我自己的纹理并不容易,因为绑定它们的明显位置 - 在 material.handleBindingOfSymbol 块中 - 为使用材质渲染的每一位几何图形调用一次。在我的情况下,这是每帧数万次,如果场景图正确地对渲染状态进行排序,这对于只需要执行一次的事情来说似乎很疯狂。

我曾假设有一种方法可以将纹理附加到 SCNProgram 或 SCNMaterial 以便场景图可以管理渲染状态,但在我的一生中我找不到类似的东西。

我是否遗漏了什么,或者纹理基本上无法用于 SCNprograms?

【问题讨论】:

  • 在一组着色器修改器中你不能做什么?
  • 嗨,大卫,感谢您的回复。我正在渲染发光的几何图形 - 与正常的“透明”着色不同,它需要像光一样表现并进行叠加混合(根据我之前回答的问题)。我发现强制sceneKit正确合成它的唯一方法是使用自定义着色器,它只进行纹理查找并返回alpha = 0的颜色。修改器似乎假设正常照明并具有照明阶段,我无法确定是否可以绕过它以简单地返回“未点亮”颜色。
  • 另外,正如我在 my previous question 中提到的,如果不在 SCNProgram 上设置“opaque=false”属性,我似乎无法让 SceneKit 启用混合 - 没有多少摆弄“透明度” “奇怪的是,财产似乎有什么不同。所以我不确定如何在没有 SCNProgram 的情况下强制混合。
  • 我现在已经编辑了我的previous question 的答案,因为我制定了一个确实 允许我针对我的特定情况使用着色器修饰符的技巧。不过,当您使用自己的自定义程序时,我仍然想知道是否有办法让 SceneKit 管理纹理资源。它似乎不应该太复杂,因为它已经在为自己的着色器做这件事,所以明显遗漏任何功能来帮助处理这些东西对我来说有点莫名其妙。

标签: opengl scenekit


【解决方案1】:

一旦设置了自定义 SCNProgram,就无法访​​问材质纹理。 SCNProgram 完全取代了 SceneKit 的渲染,让您可以进行原始 OpenGL|ES。所以你确实必须使用 GL 自己创建和绑定纹理。

【讨论】:

  • 我知道 SCNPROgram 完全取代了 SceneKit 的渲染 - 我不明白为什么场景工具包仍然不能管理纹理资源,因为你自己几乎不可能令人满意地做到这一点(特别是如果你正在做类似的事情将场景渲染到多个上下文等)。哼哼。
  • 这个答案包括如何将纹理传递给您的 SCNProgram:stackoverflow.com/a/37738386/211098
猜你喜欢
  • 2018-03-05
  • 2023-04-10
  • 2013-09-09
  • 1970-01-01
  • 2019-09-21
  • 2021-08-01
  • 2018-08-06
  • 2017-01-17
  • 2016-09-05
相关资源
最近更新 更多