有没有办法在SFML中创建一个不会减慢帧速率到爬行速度的等离子效果?
答案 0 :(得分:4)
1)直接在内存中操作图像位作为一个字节(或int /任意取决于您的目标颜色深度)数组。不要每次都使用图像中的任何GetPixel()。
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 :(得分:1)
您可以在RAM中制作等离子效果,然后将其放在纹理上并上传吗?它不是着色器效果,但它会给你一个等离子效果。