3

有没有办法在 SFML 中创建等离子效果,不会让我的帧速率变慢?

4

2 回答 2

4

1)直接在内存中将图像位作为字节(或int /取决于您的目标颜色深度)数组进行操作。不要每次都使用图像中的 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;
}
于 2010-09-21T01:19:08.780 回答
1

您可以在 RAM 中制作等离子效果,然后将其放在纹理上并上传吗?这不是着色器效果,但它会给你等离子效果。

于 2010-05-16T19:44:59.230 回答