Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Unificación de códigos  (Leído 326 veces)

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

Desconectado Alemar5

  • Habitual
  • *
  • Puntos: 69
  • Mensajes: 32
  • Sexo: Masculino
    • Ver Perfil
en: Enero 16, 2021, 06:58:40 pm
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]

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

[Draw]

/// @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);


[Begin Draw]

/// @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();
}

[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]

//
// 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;
}

[Page 2]

//
// 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));
}

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

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.