Colors 如何使用不同的颜色渲染相同的纹理?

Colors 如何使用不同的颜色渲染相同的纹理?,colors,3d,libgdx,textures,Colors,3d,Libgdx,Textures,我有一个非常简单的黑色背景上的白色形状纹理,我希望能够在不更改源纹理的情况下为白色部分指定不同的颜色: 在libgdx中是否有一种内置的方法来实现这一点,或者我必须编写一个自定义着色器(如果有,那么最好的方法是什么) 注意:我正在使用3D api,所以我的问题是在ModelBatch、材质以及如何使用这些材质渲染3D几何体的上下文中。事实证明,如果材质具有TextureAttribute.Diffuse和ColorAttribute.Diffuse,则从纹理派生的颜色值将与颜色属性定义的值相乘

我有一个非常简单的黑色背景上的白色形状纹理,我希望能够在不更改源纹理的情况下为白色部分指定不同的颜色:

在libgdx中是否有一种内置的方法来实现这一点,或者我必须编写一个自定义着色器(如果有,那么最好的方法是什么)


注意:我正在使用3D api,所以我的问题是在ModelBatch、材质以及如何使用这些材质渲染3D几何体的上下文中。

事实证明,如果材质具有TextureAttribute.Diffuse和ColorAttribute.Diffuse,则从纹理派生的颜色值将与颜色属性定义的值相乘,如图所示:


因此,在我的例子中,我可以简单地设置颜色属性的值,这将产生所需的结果->纹理的黑色部分将保持不变,因为零(黑色)乘以X将导致零;纹理的白色部分将更改为通过“颜色”属性设置的任何颜色,因为1(白色)乘以X将得到X。

您可以使用
SpriteBatch\setColor
,它将着色使用该
SpriteBatch
渲染的所有
纹理。这意味着,白色成为色调,黑色保持黑色,所有其他颜色成为两者的混合物。也可以使用
PixMap
来实现这一点,它允许您操纵每个像素并从中创建
纹理。请注意,如果您使用的是
TextureAtlas
,您将失去它的优势,如果您使用的是
Texture
,您从
PixMap
@Springrbua创建的,正如标记所暗示的,我使用的是3d api,因此没有“SpriteBatch”-我使用的是ModelBatch来绘制带有附带材质的模型实例。哦,对不起,我没看到。您可以更改每个
模型实例
材料
,而不影响原始
模型
和其他
模型实例
。因此,您可以将白色
材质
切换为绿色或蓝色材质。也可以在
模型实例
顶部添加半透明的
材质
,并启用混合,使白色部分着色。同样,使用
PixMap
的方法也应该是可行的,因为您可以从中创建
纹理
,然后可以将其用作
材质
@Springrbua所有这些方法似乎都需要多种颜色的多个纹理。我想要一个纹理,它可以以不同的方式渲染。如果使用颜色而不是
纹理
,则不需要任何
纹理
,但这取决于最终的
模型实例
的外观。如果使用
PixMap
执行此操作,则只需存储1
纹理
,并在运行时对其进行操作。然后,将有多个
纹理
环绕(每种颜色1个),但它们不会存储在资源中。
#elif defined(diffuseTextureFlag) && defined(diffuseColorFlag)
    vec4 diffuse = texture2D(u_diffuseTexture, v_diffuseUV) * u_diffuseColor;