en los colores:
Siendo Rojo el 1º valor, Azul el 2º valor, Verde el 3º valor, Trasparencia el 4º valor:
porque
1 1 1 0 = 0 0 0 0 ?
Nunca uso colores pero por lo que entiendo el primer color (1110) es blanco y el segundo (0000) negro. Pero si te fijas los dos colores son completamente transparentes, porque su cuarto valor es 0.
Bueno la respuesta ya te la dio mgbu pero te recuerdo que no siempre son iguales cuando usas blend modes el blanco que usas que es 100% transparente puede llegar a verse.
También hay problemas cuando en tus sprites tienes colores (cualquier valor que no sea negro) con 0 de transparencia. Esto es complicado que ya que en el editor de sprites no se ven, pero al usar la interpolación de texturas (interpolate colors between pixels) se ven y dan el aspecto de pixeles blancos o negros aparentemente aleatorios en tus sprites.
Corrijo: Rojo el 1º valor, Verde el 2º valor, Azul el 3º valor, Trasparencia el 4º valor.
Aclaro: RVA: <"0" = 0 ; "1" = 255>;
1+1 = 1;
0-0 = 0;
Cuando adhiero un color con otro:
0 0 1 1
0 1 0 0 +
----------
0 1 0 1
Cuando sustrae un color con otro:
0 0 1 1
0 1 0 0 -
----------
0 0 1 0
/////////////////////////////////7
Objetivo: Sustraer un color a una imagen.
Quiero eliminar un color, por ejemplo el "Rojo", para eso tengo 1º colocar a quien le quiero sustraer el color y luego el color que le quiero sustraer.
ejemplo 1a
1 0 0 1
1 0 0 1 -
----------
0 0 0 0
ejemplo 1b
0 1 0 1
0 0 0 1 -
----------
0 1 0 0
ejemplo 1c
1 1 1 1
1 0 0 1 -
----------
0 1 1 0
2º- Ahora tengo un problema. Todos los colores tienen la misma traspatencia ("0"), y no me sirve. asi que le adhiero a todos una trasparencia de "1":
ejemplo 2a
0 0 0 0
0 0 0 1 +
----------
0 0 0 1
ejemplo 2b
0 1 0 0
0 0 0 1 +
----------
0 1 0 1
ejemplo 2c
0 1 1 0
0 0 0 1 +
----------
0 1 1 1
Lo que me quedaria es que en todos las combinaciones de colores el rojos sea "0", y que todas las trasparente ahora seria bisible.
Pero... eso no es lo que verdaderamente se ve. El resultado final queda asi:
ejemplo 3a
0 0 0 0
0 0 0 1 +
----------
0 0 0 1
ejemplo 3b
0 1 0 0
0 0 0 1 +
----------
0 0 0 1
ejemplo 3c
0 1 1 0
0 0 0 1 +
----------
0 0 0 1
En todos los casos la adhicion de color parece quedar nulo en el caso que la trasparecencia quede en "0".
Por lo que mi teoria es que:
1 1 1 0 = 0 0 0 0
1 0 0 0 = 0 0 0 0
0 0 1 0 = 0 0 0 0
1 1 0 0 = 0 0 0 0
Quiero saber si tengo razon y en el caso que lo tenga ¿Como puedo hacer para cumplir el objetivo?
Que yo sepa los colores con alpha 0 no se suman porque justamente tienen alpha 0. Para mi que antes se multiplica la cantidad de color por al alpha, asi lo dice aquí (http://en.wikipedia.org/wiki/Alpha_compositing) (If it is assumed that all color values are premultiplied by their alpha values...) , algo asi:
(0 0 0)* 1
+ (1 1 1)* 0.5
---------------
0.5 0.5 0.5 1
Entonces todos los colores con 0 de alpha son iguales, porque todos son invisibles. No se puede sustraer un color realizando una resta con el color rojo?
1 1 1 1
- 1 0 0 1
--------
0 1 1 1
Ya lo solucione:
El 1º paso se aplica draw_set_blend_mode(bm_subtract);
El 2º paso se aplica draw_blend_mode_ext(2,6);
Ahora no se que es ese 2 y 6
No entiendo mucho soble el draw_blend_mode_ext pero eso es otra pregunta.
Con:
surface_set_target(S1);
draw_sprite(Sp_Color,0,0,0);
draw_set_blend_mode_ext(bm_inv_src_color,bm_src_color);
draw_sprite(Sp_Cian,0,0,0);//Color Inverso
draw_set_blend_mode(bm_normal);
surface_reset_target();
haces lo mismo en un solo paso :-[