- это новое приложение от Гаральда Мейера, создателя уже известного нашему сайту приложения
.
Приложение замечательно тем, что помимо множества встроенных в него эффектов оно позволяет применять пользовательские эффекты, использующие технологию OpenGL ES 2 fragment shaders. Фрагментные шейдеры достаточно быстро обрабатываются графическим процессором.
Для добавления собственного эффекта необходимо выполнить следующие действия:
- создать эффект в формате, описанном ниже,
- выйти из приложения ShaderFX,
- скопировать файл с эффектом, иконку эффекта и текстуры (если необходимо) в память телефона С:\data\Others\ShaderFX (например, через программу X-Plore),
- запустить приложение ShaderFX и найти новый эффект в конце списка.
ShaderFX использует простой текстовый формат файла, который включает код эффекта и всю необходимую информацию, такую как текстуры, имя эффекта и его иконку. Пример кода эффекта вы можете взять из архива, прикрепленного к теме. Важно, чтобы Вы точно соблюдали формат, иначе эффект не будет работать.
Код каждого эффекта начинается с метаданных, описывающих иконку (рекомендуемое разрешение: 100x100 пикселей, формат: png) и имя эффекта:
Icon: sampleicon.png
Name: My shaderНиже могут быть описаны четыре дополнительные текстуры (примечание: если Вы не нуждаетесь в текстурах, то просто оставьте их незаполненными):
Texture_1: sometexture.png
Texture_2:
Texture_3:
Texture_4:Каждая текстура загружается в GPU, и к ней можно обратиться, используя переменные "tex1", "tex2", "tex3", и "tex4". Переменная "tex0" содержит изображение камеры. Чтобы не нагружать память, советуем использовать как можно меньше дополнительных текстур, выбирать текстуры с разрешением 64x64 пикселей и в формате png.
После описания текстур начинается непосредственно код эффекта с ключевого слова:
Fragementshader:Доступны следующие переменные:
varying highp vec4 texc; // текущая координата текстуры (изображения камеры).
varying mediump vec2 resolution; // разрешение изображения камеры
varying mediump vec2 mouse; // координаты мыши (пальца)
varying mediump float time; // время в секундах с начала запуска эффекта
uniform sampler2D tex0; // изображение камеры
uniform sampler2D tex1;
uniform sampler2D tex2;
uniform sampler2D tex3;
uniform sampler2D tex4;Если текстуры отсутствуют, то соответствующие им переменные будут пустыми.
И далее, конечно же, тело программы (основная часть):
void main(void)
{
highp vec3 color = texture2D(tex0, texc.st).rgb;
// Сам процесс описывается здесь
gl_FragColor = vec4(clamp(color, 0.0, 1.0), 1.0);
}
Icon: sampleicon.png
Name: My shader
Texture_1: sometexture.png
Texture_2:
Texture_3:
Texture_4:
Fragementshader:
// Variables
varying highp vec4 texc; // texture coordinate (of camera image)
varying mediump vec2 resolution;// resolution of the camera image
varying mediump vec2 mouse; // coordinates of the mouse (finger)
varying mediump float time; // time since start in seconds
// Textures
uniform sampler2D tex0; // camera image
uniform sampler2D tex1;
uniform sampler2D tex2;
uniform sampler2D tex3;
uniform sampler2D tex4;
// Main program
void main(void)
{
highp vec3 color = texture2D(tex0, texc.st).rgb;
// Do processing here...
gl_FragColor = vec4(clamp(color, 0.0, 1.0), 1.0);
}
Icon: sampleicon.png
Name: My shader
Texture_1: sometexture.png
Texture_2:
Texture_3:
Texture_4:
Fragementshader:
// Variables
varying highp vec4 texc; // texture coordinate (of camera image)
varying mediump vec2 resolution;// resolution of the camera image
varying mediump float time; // time since start in seconds
// Textures
uniform sampler2D tex0; // camera image
uniform sampler2D tex1;
uniform sampler2D tex2;
uniform sampler2D tex3;
uniform sampler2D tex4;
// Main program
void main(void)
{
vec2 halfres = resolution.xy/2.0;
vec2 cPos = gl_FragCoord.xy;
cPos.x -= 0.5*halfres.x*sin(time/2.0)+0.3*halfres.x*cos(time)+halfres.x;
cPos.y -= 0.4*halfres.y*sin(time/5.0)+0.3*halfres.y*cos(time)+halfres.y;
float cLength = length(cPos);
vec2 uv = gl_FragCoord.xy/resolution.xy+(cPos/cLength)*sin(cLength/30.0-time*10.0)/25.0;
vec3 col = texture2D(tex0,uv).xyz*50.0/cLength;
gl_FragColor = vec4(col,1.0);
}
под управлением OS Symbian Belle. Отличное приложение, много интересных эффектов, особенно понравится творческим людям с навыками программирования! Единственный незначительный минус: на Symbian Belle при установке опции удаления исходной фотографии приложение вылетает.