Я создал переходный шейдер.Transition shader
Это то, что делает:
On each update the color that should be alpha changes.
Then preform a check for each pixel.
If the color of the pixel is more that the 'alpha' value
Set this pixel to transparent.
Else If the color of the pixel is more that the 'alpha' value - 50
Set this pixel to partly transparent.
Else
Set the color to black.
EDIT (DELETED старых частей):
Я попытался преобразовать мой GLSL в гал (используя http://cmodule.org/glsl2agal):
Фрагмент шейдеры:
const float alpha = 0.8;
varying vec2 TexCoord; //not used but required for converting
uniform sampler2D transition;//not used but required for converting
void main()
{
vec4 color = texture2D(transition, TexCoord.st);//not used but required for converting
color.a = float(color.r < alpha);
if(color.r >= (alpha - 0.1)){
color.a = 0.2 * (color.r - alpha - 0.1);
}
gl_FragColor = vec4(0, 0, 0, color.a);
}
И я настроил вывод и добавил, что к (пользовательскому) St arling filter:
var fragmentShader:String =
"tex ft0, v0, fs0 <2d, clamp, linear, mipnone> \n" + // copy color to ft0
"slt ft0.w, ft0.x, fc0.x \n" + // alpha = red < inputAlpha
"mov ft0.xyz, fc1.xyzz \n" + // set color to black
"mov oc, ft0";
mShaderProgram = target.registerProgramFromSource(PROGRAM_NAME, vertexShader, fragmentShader);
Это работает, и когда я устанавливаю фильтры alpha, он обновит материал. Остается только частично прозрачная вещь, но я понятия не имею, как я могу это сделать.
Я знаю, что почти нул про скворцов, но я бы предложил вам использовать http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/filters/ColorMatrixFilter.html для обработки переходов цвета. Я уверен, что если вы правильно построите матрицу, вы можете получить тот же эффект в 1000 раз больше скорости по методу петли. –
Да, у скворца тоже есть фильтры, так что в основном это одно и то же, хотя я понятия не имею, как бы добиться такого поведения с помощью фильтра цветной матрицы. – Duckdoom5