Página 1 de 1
[Shader] Substituição de cores
Enviado: Ter Mai 03, 2016 6:49 pm
por All-x
Nome: Substituição de cores.
Versão: GameMaker: Studio.
Imagens e Videos:
Vertex Shader: Clique para ver o conteúdo
Código: Selecionar todos
//
// Vertex Shader padrão - Não mexemos nas vertices
//
attribute vec3 in_Position; // (x,y,z)
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;
}
Fragment Shader: Clique para ver o conteúdo
Código: Selecionar todos
//
// Fragment Shader: Substituição de cor
//
// Posição da Textura
varying vec2 v_vTexcoord;
// Cor de origem e cor de destino
uniform vec3 dColor;
uniform vec3 sColor;
void main()
{
// Guarda o pixel (rgba) na variavel cc
vec4 cc = texture2D(gm_BaseTexture, v_vTexcoord);
// Verifica se a cor atual é a de origem
if (cc.rgb == sColor.rgb)
{
// Substitui pela de destino
cc.rgb = dColor.rgb;
}
gl_FragColor = cc;
}
Script para troca de cores: Clique para ver o conteúdo
Código: Selecionar todos
///scrColorReplace(corOrigem, corDestino)
// Argumentos
var color0 = argument0;
var color1 = argument1;
// Pega a cor de origem
sColor = shader_get_uniform(shChangeColor, "sColor");
// Define valor da cor de origem
shader_set_uniform_f(sColor, colour_get_red(color0)/255, colour_get_green(color0)/255, colour_get_blue(color0)/255);
// Pega a cor de destino
dColor = shader_get_uniform(shChangeColor, "dColor");
// Define valor da cor de destino
shader_set_uniform_f(dColor, colour_get_red(color1)/255, colour_get_green(color1)/255, colour_get_blue(color1)/255);
Instruções de uso:
Só usar na seguinte ordem no
Draw:
- Selecionar o
Shader;
- Usar o
Script de troca de cor;
- Desenhar o que você quer;
- Reiniciar o
Shader.
Download:
DOWNLOAD - EXEMPLO