【发布时间】:2024-01-14 10:25:01
【问题描述】:
我在黑色背景上有一个非常简单的白色形状纹理,我希望能够在不更改源纹理的情况下为白色部分指定不同的颜色:
在 libgdx 中是否有内置方法可以做到这一点,或者我是否必须编写自定义着色器(如果有,最好的方法是什么)?
注意:我使用的是 3D api,所以我的问题是关于 ModelBatch、材料以及如何使用它们来渲染 3D 几何体。
【问题讨论】:
-
您可以使用
SpriteBatch#setColor,它将为所有使用此SpriteBatch渲染的Textures 着色。这意味着,白色成为浅色,黑色保持黑色,所有其他颜色成为两者的混合。也可以使用PixMap来做到这一点,它允许您操纵每个像素并从中创建一个Texture。请注意,如果您使用的是TextureAtlas,如果您使用的是从PixMap创建的Texture,您将失去它的优势。 -
@Springrbua 正如标签所暗示的那样,我使用的是 3d api,所以没有“SpriteBatch”——我使用 ModelBatch 来绘制带有随附材料的模型实例。
-
哦,对不起,我没看到。您可以更改每个
ModelInstance的Material,而不影响原来的Model和其他ModelInstances。所以你可以用绿色或蓝色切换白色Material。也许也可以在ModelInstance上添加一个半透明的Material并启用混合,它应该为白色部分着色。PixMap的方式也应该是可能的,因为您可以从中创建一个Texture,然后可以将其用作Material。 -
@Springrbua 所有这些方法似乎都需要多种颜色的多种纹理。我想要一个可以用不同方式渲染的单一纹理。
-
如果使用颜色而不是
Texture,则不需要任何Texture,但这取决于最终ModelInstance的外观。如果您使用PixMap执行此操作,则只需存储 1 个Texture并在运行时对其进行操作。然后,您将拥有多个Texturearround(每种颜色 1 个),但它们不会存储在资产中。