Godot Shader - 如何做出一个随意缩放的背景桌布

首先,去下载纹理

然后,给shader设置代码

这里需要gd代码传递一个缩放比
贴图纹理支持旋转

shader_type canvas_item;

uniform float scale_ratio = 1.0;

vec2 rot(vec2 uv, float a){
    return vec2(uv.x * cos(a) - uv.y * sin(a), uv.y * cos(a) + uv.x * sin(a));  
}

void fragment(){
    vec2 uv = UV/scale_ratio;
    uv.y*=scale_ratio;
    vec4 cc = texture(TEXTURE, rot(uv, 30)); 
    COLOR = cc;
}

gd代码

获得屏幕的默认缩放比,然后根据这个缩放比进行比较,获得新缩放比需要的贴图缩放关系。 当窗体越大时,贴图缩放相对越小

extends TextureRect

var scaleRatio = 0;

func _ready():
    var winSize = OS.window_size;
    scaleRatio = winSize.x/winSize.y;

func _on_game_bg_resized():
    var winSize = OS.window_size;
    var newScaleRatio = winSize.x/winSize.y;
    material.set_shader_param('scale_ratio', scaleRatio/newScaleRatio);

试试吧,当你拖拽缩放窗体大小是,桌布只是跟着扩展,而不是变形或缩放

你可能感兴趣的:(Godot Shader - 如何做出一个随意缩放的背景桌布)