Hola amigos, tengo una nueva duda jeje,
Tengo 2 codigos para 2 objetos diferentes, un objeto busca la textura de un tileset para hacer un reflejo.
El otro objeto funciona por medio de un shader el cual distorsiona el sprite como unas olas.
El objetivo es hacer que el objeto que refleja los tiles también distorsione el reflejo por medio del shader, pero no se como unirlos.
Estos son los codigos de mis objetos:
[OBJ_WATERTILES] (el reflejo)
[create]
var w = camera_get_view_width(view_camera);
var h = camera_get_view_height(view_camera);
water_surf = surface_create(w, h);
[Draw]
var tilemap = layer_tilemap_get_id("WaterTiles");
surface_set_target(water_surf);
var cx = camera_get_view_x(view_camera);
var cy = camera_get_view_y(view_camera);
draw_tilemap(tilemap, -cx, -cy);
var yoff = (obj_vampire_bunny.sprite_height - obj_vampire_bunny.sprite_yoffset)*2;
gpu_set_blendmode_ext(bm_dest_alpha, bm_inv_src_alpha);
draw_sprite_ext(obj_vampire_bunny.sprite_index, obj_vampire_bunny.image_index, obj_vampire_bunny.x - cx, (obj_vampire_bunny.y-6+yoff) - cy, obj_vampire_bunny.image_xscale, -obj_vampire_bunny.image_yscale, 0, -1, 0.6);
gpu_set_blendmode(bm_normal);
var yoff = (obj_prota.sprite_height - obj_prota.sprite_yoffset)*2;
gpu_set_blendmode_ext(bm_dest_alpha, bm_inv_src_alpha);
draw_sprite_ext(obj_prota.sprite_index, obj_prota.image_index, obj_prota.x - cx, (obj_prota.y-6+yoff) - cy, obj_prota.image_xscale, -obj_prota.image_yscale, 0, -1, 0.6);
gpu_set_blendmode(bm_normal);
surface_reset_target();
draw_surface(water_surf, cx, cy);
[Begin Draw]
if (!surface_exists(water_surf)){
var w = camera_get_view_width(view_camera);
var h = camera_get_view_height(view_camera);
water_surf = surface_create(w, h);
}
else{
surface_set_target(water_surf);
draw_clear_alpha(0, 0);
surface_reset_target();
}
[OBJ_TEST] (Distorsion)
[Create]
uniTime = shader_get_uniform(sh_water, "Time");
uniTexel = shader_get_uniform(sh_water, "Texel");
[Draw]
shader_set(sh_water);
shader_set_uniform_f(uniTime, current_time);
var tex = sprite_get_texture(sprite_index, image_index);
shader_set_uniform_f(uniTexel, texture_get_texel_width(tex), texture_get_texel_height(tex));
draw_self();
shader_reset();
[SH_WATER] (Shader de distorsion)
[Page 1]
attribute vec3 in_Position;
attribute vec4 in_Colour;
attribute vec2 in_TextureCoord;
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
void main()
{
vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0);
gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos;
v_vColour = in_Colour;
v_vTexcoord = in_TextureCoord;
}
[Page 2]
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
uniform float Time;
uniform vec2 Texel;
const float Xspeed = 0.01;
const float Xfreq = 20.0;
const float Xsize = 5.0;
const float Yfreq = 100.0;
const float Ysize = 20.0;
void main()
{
float Xwave = sin(Time*Xspeed + v_vTexcoord.y*Xfreq) * (Xsize*Texel.x) * (v_vTexcoord.y);
float Ywave = sin(Time*Xspeed + v_vTexcoord.y*Yfreq) * (Ysize*Texel.y) * (v_vTexcoord.y);
gl_FragColor = v_vColour * texture2D( gm_BaseTexture, v_vTexcoord + vec2(Xwave, Ywave));
}
Si alguien tiene idea de como unir esos dos codigos se lo agradeceria mucho :,3