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