2010-05-16 22 views

Répondre

4

1) Manipulez les bits d'image directement dans la mémoire sous la forme d'un tableau d'octets (ou int/quel que soit votre profondeur de couleur cible). N'utilisez pas ce que GetsPixel() d'une image à chaque fois.

2) Minimisez vos maths. Pour les effets plasma, vous utiliserez généralement beaucoup de fonctions trigonométriques qui sont assez lentes lorsque vous les effectuez (hauteur largeur) par seconde. Utilisez soit une bibliothèque mathématique dédiée et rapide pour vos calculs, soit, mieux encore, cachez les calculs au début et utilisez une table de recherche pendant l'effet pour couper entièrement les maths de chaque image.

3) L'une des choses qui a fait que les effets du plasma old-school ont été si rapides était le cycle de la palette. Je ne connais aucun moyen de répliquer ceci (ou les palettes en général) avec SFML directement, mais vous pouvez utiliser les shaders GLSL pour obtenir le même type de résultat sans un gros coup de performance. Quelque chose comme ceci:

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

Pouvez-vous simplement créer votre effet plasma en RAM, puis le placer sur une texture et le télécharger? Ce n'est pas un effet de shader, mais cela vous donnera un effet plasma.