【发布时间】:2014-08-01 14:32:38
【问题描述】:
我一直在学习使用 LibGDX 和 OpenGL,但我无法弄清楚如何以合理的方式实现自定义着色器。
我在项目中包含着色器的方式是创建一个 implements 和 gdx.graphics.g3d.Shader 类的类。然后我使用这个类来编译我的自定义着色器程序并用它来渲染网格。
我通过从.g3db 文件创建ModelInstance 来创建我的网格,然后通过调用ModelBatch 实例的render() 方法将它们传递给着色器。
当我需要为每个网格应用不同的纹理时,我的困惑就开始了。现在我只是在每次modelBatch.render() 调用之前在我的着色器上设置一个uniform。
这是我的问题:
- 即使在大型项目中,这样设置制服是否合理?
- 这是
implement-ingShader类的预期方式以及一般使用 OpenGL 着色器的正确方式吗? (创建 1 个着色器,然后将其应用于我的所有模型) - 如何在着色器中使用 DRY 原则?换句话说,如果我想在模型上使用稍微不同的着色器,但又想保持与其他一切相同的光照。是否最好在我的着色器中简单地包含
if语句并使用uniform作为这些特殊情况的标志?否则,我似乎必须创建一个新着色器,然后复制并粘贴大部分原始着色器。
【问题讨论】:
标签: libgdx opengl-es-2.0 shader