SFML Плазменный спрайт Эффект?
Есть ли способ создать эффект плазмы в SFML, который не замедляет мою частоту кадров при сканировании?
2 ответа
1) Манипулируйте битами изображения непосредственно в памяти в виде байтового массива (или целых / любых других в зависимости от вашей целевой глубины цвета). Не используйте ничего, что GetsPixel() из изображения каждый раз.
2) Минимизируйте свою математику. Для плазменных эффектов вы обычно будете использовать множество триггерных функций, которые выполняются довольно медленно, когда вы выполняете их (частота кадров поширине) раз в секунду. Либо используйте быструю выделенную библиотеку математики для своих расчетов, либо, что еще лучше, кэшируйте вычисления в начале и используйте справочную таблицу во время эффекта, чтобы полностью исключить математику из каждого кадра.
3) Одной из вещей, которая заставляла эффекты плазмы старой школы работать так быстро, была палитра езда на велосипеде. Я не знаю ни одного способа напрямую воспроизвести это (или палитры в целом) с SFML, но вы можете использовать шейдеры GLSL, чтобы получить такой же результат без большого снижения производительности. Что-то вроде этого:
float4 PS_ColorShift(float2 Tex : TEXCOORD0) : COLOR0
{
float4 color = tex2D(colorMap, Tex);
color.r = color.r+sin(colorshift_timer+0.01f);
color.g = color.g+sin(colorshift_timer+0.02f);
color.b = color.b+sin(colorshift_timer+0.03f);
color.a = 1.0f;
saturate(color);
return color;
}
Можете ли вы просто сделать свой эффект плазмы в оперативной памяти, затем поместить его в текстуру и загрузить его? Это не шейдерный эффект, но он даст вам эффект плазмы.