2010-05-16 30 views

回答

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; 
} 
1

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