SFML Плазменный спрайт Эффект? - PullRequest
3 голосов
/ 16 мая 2010

Есть ли способ создать эффект плазмы в SFML, который не замедлит мою частоту кадров при сканировании?

Ответы [ 2 ]

4 голосов
/ 21 сентября 2010

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;
}
1 голос
/ 16 мая 2010

Можете ли вы просто сделать свой эффект плазмы в оперативной памяти, затем поместить его на текстуру и загрузить его? Это не эффект шейдера, но он даст вам эффект плазмы.

...