【发布时间】:2023-03-12 09:45:01
【问题描述】:
有没有办法在 SFML 中创建等离子效果,不会让我的帧速率变慢?
【问题讨论】:
有没有办法在 SFML 中创建等离子效果,不会让我的帧速率变慢?
【问题讨论】:
1) 将内存中的图像位直接作为字节(或整数/取决于您的目标颜色深度)数组进行操作。不要每次都从图像中使用 GetsPixel() 的任何东西。
2) 尽量减少数学。对于等离子效果,您通常会使用很多触发函数,这些函数在每秒执行 (heightwidthframerate) 次时相当慢。使用快速的专用数学库进行计算,或者更好的是,在开始时缓存计算并在效果期间使用查找表将数学完全从每一帧中删除。
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;
}
【讨论】:
您可以在 RAM 中制作等离子效果,然后将其放在纹理上并上传吗?这不是着色器效果,但它会给你等离子效果。
【讨论】: