Unificación de códigos

Publicado por Alemar5, Enero 16, 2021, 11:58:40 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Alemar5

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]

[gml]/// Varialbes
var w = camera_get_view_width(view_camera);
var h = camera_get_view_height(view_camera);
water_surf = surface_create(w, h);[/gml]

[Draw]

[gml]/// @description
//Get tilemap
var tilemap = layer_tilemap_get_id("WaterTiles");

//Set surface
surface_set_target(water_surf);

//Draw tilemap
var cx = camera_get_view_x(view_camera);
var cy = camera_get_view_y(view_camera);
draw_tilemap(tilemap, -cx, -cy);


///Bunny

//Draw reflected player sprite
//Get player y offset for reflection
var yoff = (obj_vampire_bunny.sprite_height - obj_vampire_bunny.sprite_yoffset)*2;
//Set blendmode
gpu_set_blendmode_ext(bm_dest_alpha, bm_inv_src_alpha);
//Draw reflection
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);
//Reset blendmode
gpu_set_blendmode(bm_normal);


///PROTA

//Draw reflected player sprite
//Get player y offset for reflection
var yoff = (obj_prota.sprite_height - obj_prota.sprite_yoffset)*2;
//Set blendmode
gpu_set_blendmode_ext(bm_dest_alpha, bm_inv_src_alpha);
//Draw reflection
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);
//Reset blendmode
gpu_set_blendmode(bm_normal);



//Reset surface
surface_reset_target();

//Draw surface in game
draw_surface(water_surf, cx, cy);

[/gml]

[Begin Draw]

[gml]/// @description
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();
}[/gml]

[OBJ_TEST] (Distorsion)

[Create]

[gml]uniTime = shader_get_uniform(sh_water, "Time");
uniTexel = shader_get_uniform(sh_water, "Texel");
[/gml]

[Draw]

[gml]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();[/gml]

[SH_WATER] (Shader de distorsion)

[Page 1]

[gml]//
// Simple passthrough vertex shader
//
attribute vec3 in_Position;                  // (x,y,z)
//attribute vec3 in_Normal;                  // (x,y,z)     unused in this shader.
attribute vec4 in_Colour;                    // (r,g,b,a)
attribute vec2 in_TextureCoord;              // (u,v)

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;
}
[/gml]

[Page 2]

[gml]//
// Simple passthrough fragment shader
//
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()
{
   //X wave
   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));
}
[/gml]

Si alguien tiene idea de como unir esos dos codigos se lo agradeceria mucho :,3

236 Visitantes, 0 Usuarios