使用自定义着色器有效组织LibGDX项目
我一直在学习使用LibGDX和OpenGL,但我很难弄清楚如何以合理的方式实现自定义着色器 我在项目中包括着色器的方法是创建一个类,该类实现了使用自定义着色器有效组织LibGDX项目,libgdx,opengl-es-2.0,shader,Libgdx,Opengl Es 2.0,Shader,我一直在学习使用LibGDX和OpenGL,但我很难弄清楚如何以合理的方式实现自定义着色器 我在项目中包括着色器的方法是创建一个类,该类实现了gdx.graphics.g3d.Shader类。然后我使用这个类来编译我的自定义着色器程序,并使用它来渲染网格 我通过从.g3db文件创建ModelInstance来创建网格,然后通过调用ModelBatch实例的render()方法将它们传递给着色器 当我需要为每个网格应用不同的纹理时,我的困惑就开始了。现在,我只是在每次调用modelBatch.re
gdx.graphics.g3d.Shader
类。然后我使用这个类来编译我的自定义着色器程序,并使用它来渲染网格
我通过从.g3db
文件创建ModelInstance
来创建网格,然后通过调用ModelBatch
实例的render()
方法将它们传递给着色器
当我需要为每个网格应用不同的纹理时,我的困惑就开始了。现在,我只是在每次调用modelBatch.render()
之前在着色器上设置一个uniform
以下是我的问题:
实现-ing着色器
类的预期方法,以及通常使用OpenGl着色器的正确方法?(创建1个着色器,然后将其应用于我的所有模型)
if
语句并使用uniform
作为这些特殊情况的标志是最好的吗?否则,我似乎必须创建一个新的着色器,只需复制并粘贴大部分原始着色器batch.end()后发生代码>,因此可能无法生成正确的结果。使用材料
或环境
参见
ModelBatch
上设置一个来管理此操作#if
指令:你对1和3的回答听起来不错。对于2,我不知道如何使用
ShaderProvider
。我是否需要创建一个实现ShaderProvider
的新类,并根据可渲染的属性在getShader()
中返回一个Shader
?这不是只有在每个着色器需要唯一的制服组合时才起作用吗?是和是。记住,属性基本上与制服相同。看看这个答案,我给出了一个使用shaderprovider的小例子:为了向任何遇到这个问题的人澄清,您将shaderprovider
传递给ModelBatch
如下:ModelBatch batch=newmodelbatch(myShaderProvider)代码>