Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: fab62 en Febrero 09, 2014, 07:59:06 PM

Título: Problema con shaders
Publicado por: fab62 en Febrero 09, 2014, 07:59:06 PM
Hola a todos  :), hoy me puse a experimentar con los shaders, lo cual es muy nuevo para mi  :-[, por lo que decidi hacerle sombras a mis sprites, y me encontré con este codigo, super basico:

En vertex lo dejé como venia :P asi:

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

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


Y en fragment puse esto:

varying vec2 v_vTexcoord;
varying vec4 v_vColour;

void main()
{
    gl_FragColor = v_vColour * texture2D( gm_BaseTexture, v_vTexcoord );
    gl_FragColor.rgb = vec3(0,0,0);
}


y sale bien todo... pero vi que tambien existe rgba, que necesita 4 parametros, ya que quiero que la sombra no sea tan intensa:

varying vec2 v_vTexcoord;
varying vec4 v_vColour;

void main()
{
    gl_FragColor = v_vColour * texture2D( gm_BaseTexture, v_vTexcoord );
    gl_FragColor.rgba = vec4(0,0,0,0.5);
}


La sombra asi no es tan intensa, pero ahora no tiene la misma forma del sprite :S, tiene una forma cuadrada.

El shader lo utilicé en el evento draw :):


if (shader_is_compiled(sh_shadow))
{
     shader_set(sh_shadow);
            draw_sprite_ext(sprite_index, image_single, x - 5, y - 5, escala_x, escala_y, 0, c_black, 1);
     shader_reset();
}


escala_x y escala_y son variables que yo utilizo para hacer de la escala algo mas manejable  XD, que es lo que esta mal??
por otra parte, hay alguna pagina o manual que me recomienden para aprender a utilizar los shaders??

Muchas gracias por leer!!
Título: Re:Problema con shaders
Publicado por: penumbra en Febrero 09, 2014, 10:31:16 PM
¿Y si el fragment shader lo dejas como está originalmente y ajustas el alpha en la función de dibujo?

draw_sprite_ext(sprite_index, image_single, x - 5, y - 5, escala_x, escala_y, 0, c_black, 0.5)

Yo hice una pregunta similar en YoYo, pensando en usar una máscara para aplicar el shader a una zona específica, y la respuesta que me dieron era no hacer eso dentro del shader (cosa que yo pensaba que debería ser así) sino usar las funciones nativas de GM para manejar la máscara en DRAW.
Título: Re:Problema con shaders
Publicado por: fab62 en Febrero 10, 2014, 02:09:47 AM
Si, al final pude ver que esa era la mejor manera de hacerlo :)... pero aún no entiendo mucho la cosa de los shaders  :-X