如何给 TextureRect 着色?
How to tint a TextureRect?
有没有办法在 Godot 4.3 中为 TextureRect
着色?例如:想象一个透明背景上的白色图标分配给 TextureRect
。有没有办法用任意颜色绘制白色图标?
在“检查器”面板的“可见性”下,您会找到 modulate
和 self_modulate
属性。您可以使用它们对任何 CanvasItem
(包括任何 Control
和任何 Node2D
)进行着色(或通过着色 alpha 更改不透明度)。
属性 modulate
和 self_modulate
的不同之处在于它们适用于哪个项目。 属性 modulate
适用于它所应用的项目及其子项,而 self_modulate
仅适用于该项目而不适用于其任何子项。
当然,您也可以创建和设置自定义 ShaderMaterial
。参见 CanvasItem shaders。使用片段功能,您可以在其中设置所需的任何颜色。
例如,此着色器将保留纹理中的 alpha,但将所有内容设置为红色:
shader_type canvas_item;
void fragment()
{
COLOR.a = texture(TEXTURE, UV).a;
COLOR.rgb = vec3(1.0, 0.0, 0.0);
}
或者这个其他示例将保留红色和 alpha(它将红色和 alpha 乘以 1,绿色和蓝色乘以 0):
shader_type canvas_item;
void fragment()
{
COLOR = texture(TEXTURE, UV) * vec4(1.0, 0.0, 0.0, 1.0);
}
而且,是的,这些结合了。 modulate
和 self_modulate
的效果在着色器 material.
之后应用
有没有办法在 Godot 4.3 中为 TextureRect
着色?例如:想象一个透明背景上的白色图标分配给 TextureRect
。有没有办法用任意颜色绘制白色图标?
在“检查器”面板的“可见性”下,您会找到 modulate
和 self_modulate
属性。您可以使用它们对任何 CanvasItem
(包括任何 Control
和任何 Node2D
)进行着色(或通过着色 alpha 更改不透明度)。
属性 modulate
和 self_modulate
的不同之处在于它们适用于哪个项目。 属性 modulate
适用于它所应用的项目及其子项,而 self_modulate
仅适用于该项目而不适用于其任何子项。
当然,您也可以创建和设置自定义 ShaderMaterial
。参见 CanvasItem shaders。使用片段功能,您可以在其中设置所需的任何颜色。
例如,此着色器将保留纹理中的 alpha,但将所有内容设置为红色:
shader_type canvas_item;
void fragment()
{
COLOR.a = texture(TEXTURE, UV).a;
COLOR.rgb = vec3(1.0, 0.0, 0.0);
}
或者这个其他示例将保留红色和 alpha(它将红色和 alpha 乘以 1,绿色和蓝色乘以 0):
shader_type canvas_item;
void fragment()
{
COLOR = texture(TEXTURE, UV) * vec4(1.0, 0.0, 0.0, 1.0);
}
而且,是的,这些结合了。 modulate
和 self_modulate
的效果在着色器 material.